ios:如何获取导航栏中rightBarButtonItem对应self.view的坐标?
PHP中文网
PHP中文网 2017-04-18 09:05:01
0
3
1014

1.我想做一个动画,需要知道rightBarButtonItem对应self.view中的位置,即:

CGPoint toPoint = [self.navigationController.navigationBar convertPoint:self.navigationItem.titleView.center toView:self.view];

但是获取到的位置坐标始终不正确:

2.问题是:
怎么能够获取到导航栏中的各个navigationItem对应在self.view中的位置呢?

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(3)
迷茫

self.view est une vue placée dans le contrôleur de navigation, et la barre de navigation est la même, donc elles sont égales. Cela ne signifie pas que la barre de navigation est une sous-vue de self.view, donc naturellement il n'y a aucun moyen. pour le calculer. La position des sous-éléments dans la barre de navigation dans self.view.

Je pense que ce que vous voulez calculer, c'est la position de l'élément dans la fenêtre ou navigationController.view, n'est-ce pas ?

Vous pouvez utiliser le débogage des vues pour voir la relation hiérarchique entre les différentes vues.

PHPzhong
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
[btn setTitle:@"right" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];

CGRect frameInNaviView = [self.navigationController.view convertRect:btn.frame fromView:btn.superview];

UIView *vShow = [[UIView alloc] initWithFrame:frameInNaviView];
vShow.backgroundColor = [UIColor redColor];
[self.navigationController.view addSubview:vShow];

frameInNaviView est ce dont vous avez besoin

迷茫

Après tests, il a été trouvé :

UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
[btn setTitle:@"right" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];

CGRect frameInNaviView = [self.navigationController.view convertRect:btn.frame fromView:btn.superview];

Cela peut en effet obtenir la bonne position ; mais après des tests sur l'iPad, il a été constaté que le même code obtenait le résultat {{0, 0}, {44, 44}}. Cela semble conduire à une autre nouvelle question. : Pourquoi est-ce correct sur iPhone mais pas sur iPad ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal