ios:如何获取导航栏中rightBarButtonItem对应self.view的坐标?
PHP中文网
PHP中文网 2017-04-18 09:05:01
[iOS讨论组]

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

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

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

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

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
迷茫

self.view 是一個放到 navigation controller 里的 view, navigation bar 也一樣, 所以它倆之間是平級的, 並不是說 navigation bar 是 self.view 的子 view,自然也就沒有辦法計算 navigation bar 里的子項目在 self.view 里的位置。

我想你想算的應該是 item 在 window 或者在 navigationController.view 中的位置吧?

你可以用 view debugging 看一下各個 view 之間的層級關係。

PHPz
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 就是你需要的

迷茫

经过测试发现:

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];

这样确实是可以获取到正确的位置;但由于在ipad上测试发现,同样的代码,得到的结果却是{{0, 0}, {44, 44}}.这貌似又引出了一个新的问题:为何在iPhone 上是正确的,在ipad上却不正确呢?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号