我在 UINavigationItem 上遇到提示问题,但无法解决...
我有一个主视图控制器和一个详细视图控制器。当我从主控推送到详细信息时,详细信息视图控制器上会显示提示:
![prompt](https://i.stack.imgur.com/zCFdQ.png)
但是,当我弹回到主视图控制器时,视图不会调整大小,并且窗口会显示出来(窗口已被涂成红色):
![window](https://i.stack.imgur.com/8Vvgc.png)
这只发生在 iOS7 上,在 iOS6 上视图会按预期调整大小。
我尝试了一些方法,例如将提示设置为 nilviewWillDisappear
or viewDidDisappear
但似乎没有什么可以解决这个问题。
如果我将导航控制器中的导航栏设置为半透明,它确实可以解决此问题 - 不幸的是,这不是一个选项。
我在这里创建了一个非常小的示例项目来演示这个问题:https://github.com/InsertWittyName/NavigationItemPrompt
预先感谢您的任何帮助!
我能想到的一个解决方案是子类化UIView
的主人,并实施viewDidMoveToSuperview
将视图的框架设置为从导航栏的高度到超级视图的末尾。由于导航栏不是半透明的,您的工作会更轻松,因为您不必考虑布局指南和内容插图。
有几点需要注意。当推送和弹出时,系统将视图控制器的视图移动到动画的另一个超级视图,然后将其返回到导航控制器的私有视图层次结构。此外,当视图超出视图层次结构时,超级视图将变为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
,在开始进入视图层次结构之前,根据您的需要设置参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)