我在iOS应用扩展程序中以模态方式呈现UINavigationController
:
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
nav.modalPresentationStyle = UIModalPresentationFormSheet;
nav.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:nav animated:YES completion:nil];
当导航控制器出现时,其根视图控制器的UIBarButtonItems
跳转位置:
我在viewDidLoad
创建和添加按钮。它们只是标准的条形按钮项目:
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
我没有覆盖viewDidAppear
(这似乎是按钮跳转的点)。
从我的应用程序中展示这个相同的导航控制器/根视图控制器,而不是应用程序扩展,并没有给我同样的问题。有什么想法吗?
答案 0 :(得分:3)
我希望其他人找到更好的方法来做到这一点,但我目前的解决方案是创建独立按钮,然后使用按钮[[UIBarButtonItem alloc] initWithCustomView:]
。不理想,并且凹痕仍然存在,但奇怪的跳跃不再发生。
如果凹痕困扰你,你也可以在按钮的外侧设置负固定空间,使它们更靠近边缘。
这是一个包括间隔符的例子:
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
<other button config here, set targets, whatever>
[button sizeToFit];
UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithCustomView:button];
UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[fixedSpace setWidth:-8.0f];
self.navigationItem.leftBarButtonItems = @[fixedSpace, leftBarButton];
这只发生在我的分享扩展中,并且我没有遇到任何与分离控制器或类似内容相关的问题。
答案 1 :(得分:2)
正如@ Stonz2所提到的,这似乎是从分离的视图控制器呈现模态的特征。我遇到了同样的问题,并通过重新组织我的应用程序来解决它,以便它不会从一个独立的控制器中呈现。
如果您收到以下错误消息,您将知道是否从分离的控制器中呈现:
不建议在分离的视图控制器上显示视图控制器
答案 2 :(得分:0)
我是从一个独立的viewController呈现的。我从来没有得到警告。但是我尝试在NavigationController中嵌入那个分离的viewController,问题就消失了。