我在UINavigationItem上的提示符有个问题,我无法解决.
我有一个主视图控制器和一个详细视图控制器。当我从主程序推送到详细信息时,详细视图控制器上会显示一个提示:

但是,当我弹出主视图控制器时,视图不会调整大小,窗口会显示出来(窗口已被红色):

这只发生在iOS7上,在iOS6上视图按预期调整大小。
我尝试过一些事情,比如在viewWillDisappear或viewDidDisappear中将提示符设置为零,但似乎没有什么可以修复它。
如果我将导航控制器中的导航栏设置为半透明,它确实修复了这个问题--不幸的是,这不是一个选项。
我在这里创建了一个非常小的示例项目,演示了这个问题:https://github.com/InsertWittyName/NavigationItemPrompt
提前感谢您的帮助!
发布于 2014-03-03 19:00:38
我可以想到的一个解决方案是子类主视图的UIView,并实现viewDidMoveToSuperview将视图的框架设置为从导航条的高度到superview的末尾。因为导航条不是半透明的,所以您的工作更容易,因为您不需要考虑布局指南和内容嵌入。
一些需要注意的事情。当推送和弹出时,系统将视图控制器的视图移动到动画的另一个superview中,然后将其返回到导航控制器的私有视图层次结构中。此外,当视图超出视图层次结构时,superview将成为nil。
下面是一个实现示例:
@interface LNView : UIView
@end
@implementation LNView
- (void)viewDidMoveToSuperview
{
[super viewDidMoveToSuperview];
if(self.superview != nil)
{
CGRect rect = self.superview.bounds;
rect.origin.y += 44;
rect.size.height -= 44;
[self setFrame:rect];
}
}
@end这不是一个完美的实现,因为它使用了一个硬编码的值来表示导航条的高度,没有考虑到可能的工具栏等等。但是所有这些都可以作为属性添加到这个视图中,在viewDidLoad中,在它开始进入视图层次结构之前,根据您的需要设置参数。
发布于 2016-10-19 01:38:27
当用户点击后退按钮时,您可以删除提示符,如下所示
override func willMove(toParentViewController parent: UIViewController?) {
super.willMove(toParentViewController: parent)
if parent == nil {
navigationItem.prompt = nil
}
}发布于 2016-11-20 06:00:44
问题是你的导航条是不透明的还是半透明的。令人遗憾的是,苹果已经让这个可恶的bug困扰了我们三年多了。
所有这些解决方案都是黑客。我的解决方案是: A)永远不要使用提示,或者B)在每个视图中使用它们,即使您必须将它们设置为"“。
https://stackoverflow.com/questions/22115821
复制相似问题