在iOS 9.3 iPhone和iPad(实际设备和模拟器)中,我在方向更改通知后获得有关[UIScreen mainScreen].bounds
的信息(设备和模拟器之间)不一致。
我的视图控制器会在视图加载时添加方向更改通知:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(deviceOrientationDidChangeNotification:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
方向更改时的行为如下:
- (void) deviceOrientationDidChangeNotification:(NSNotification *) notification {
CGRect frame = [UIScreen mainScreen].bounds;
NSLog(@"Main screen is w=%f h=%f", frame.size.width, frame.size.height);
}
在iPhone上运行此功能,在方向更改后,日志消息指示与帖子方向更改屏幕尺寸对应的框架宽度和高度。
在iPad上运行此功能,在方向更改后,日志消息指示与预方向更改屏幕尺寸对应的框架宽度和高度。
这种不一致的东西需要编码吗?我可以开始尝试检测方向是什么(横向或纵向),然后使用有意义的宽度和高度值,但这很糟糕。
答案 0 :(得分:0)
处理此问题的正确方法是避免使用通知系统,而是使用 - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator
UIViewController上的方法,您希望在其中调整UI以进行方向更改。