我有一个简单的布局,我有一个UINavigationViewController
和一个显示在其中的常规视图控制器。然后我有一个固定大小的图像,以及一些应该填充剩余空间的文本。见下文:
前景中图像的顶部被约束到顶部布局指南,它在Xcode中工作正常(不显示任何警告或任何内容),但在运行时似乎被忽略:
图像的顶部固定在屏幕顶部而不是导航栏的底部。我知道这不一定是不正确的(表格视图向上滚动到导航栏下方),但这非常烦人,因为这里没有滚动。
但等等,还有更多。如果我旋转屏幕,它会自行修复!
我尝试过在不同的地方添加layoutIfNeeded
的电话,但无济于事。
我做错了什么?
附注:
根据下面的dasdom的评论,我尝试在代码中添加此约束,没有明显的变化。我不是百分之百确定我做对了,但是:
-(void)viewDidLayoutSubviews {
NSMutableDictionary * views = [NSMutableDictionary new];
views[@"v"] = self.imageView;
views[@"topLayoutGuide"] = self.topLayoutGuide;
NSMutableArray * constraints = [NSMutableArray new];
[constraints addObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:[topLayoutGuide][v]"
options:0
metrics:nil
views:views]
];
[self.view addConstraints:constraints];
[self.view layoutSubviews];
}
一些调试输出:
如果我在viewWillAppear
期间打印出导航控制器,我明白了:
2014-05-21 14:45:51.961 iBeaconMap[914:60b] self.navigationController.navigationBar: <UINavigationBar: 0x8cbded0; frame = (0 20; 320 44); opaque = NO; autoresize = W; userInteractionEnabled = NO; gestureRecognizers = <NSArray: 0x8c72440>; layer = <CALayer: 0x8cbe010>>
如果我设置一个计时器以定期打印topLayoutGuide
的值,它会在我第一次旋转时显示“20”,此时它会根据方向显示“52”或“64” (如预期的那样)。
也许我需要弄清楚旋转对导航控制器做了什么,并模拟....... 抓住吸管
答案 0 :(得分:-1)
在Navigation controller top layout guide not honored with custom transition中实施解决方案后,问题已解决。
问题实际上是由我甚至没想到的自定义转换引起的(因为这就是为什么会出现问题?)。在自定义转换面前,topLayoutGuide
属性似乎不可靠。很高兴知道,我猜。