【发布时间】:2015-11-06 20:47:45
【问题描述】:
我在 iOS 7 和 8 上运行的应用在 iOS9 上遇到了一些小问题,其中一个是单个视图控制器的高度错误。
以下代码:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self layoutViews];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self layoutViews];
}
- (void)layoutViews {
NSLog(@"Size-> %@", NSStringFromCGRect(self.view.frame));
}
产生以下错误输出:
2015-11-06 22:42:31.737 app[62442:1136052] Size-> {{0, 0}, {375, 667}}
2015-11-06 22:42:33.318 app[62442:1136052] Size-> {{0, 32}, {667, 343}}
2015-11-06 22:42:34.885 app[62442:1136052] Size-> {{0, 64}, {375, 603}}
2015-11-06 22:45:18.063 app[62442:1136052] Size-> {{0, 32}, {667, 343}}
当我:
- 纵向打开 VC
- 旋转到横向
- 转回纵向
- 转回横向
似乎 VC 的初始加载在self.frame.size 下提供了错误的大小,而所有后续轮换都是正确的。 603 的高度是正确的,但是您可以看到,在两次旋转到横向时,667 的高度仍然不正确。
我认为与导航控制器栏有关的某些事情可能会破坏它。我在viewDidLoad 方法中的代码很简单:
- (void)viewDidLoad {
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
[self setEdgesForExtendedLayout:UIRectEdgeNone];
}
[super viewDidLoad];
}
这在 iOS 8 上运行良好。
更新
通过添加对viewDidAppear 的调用来解决此问题:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self layoutViews];
[activitiesTable flashScrollIndicators];
}
【问题讨论】:
-
您是否启用了状态栏?
-
是的,我一直有状态栏。
标签: ios objective-c iphone uiviewcontroller ios9