我在iPad应用中使用了splitView。详细视图中有2个子视图,它根据etail视图边界绘制自己。 问题是,即使ipad处于横向模式,它们总是在(1024,768)中绘制自己。
顺便说一句 - 如果我在纵向模式下调用然后旋转ipad,它们会缩放到(706,768)。
我已经检查了详细视图框架和边界(在视图中执行了加载方法),在这两种情况下我得到了这个:
NSLog(@"screen frame = %@",NSStringFromCGRect(self.view.frame));
NSLog(@"screen bounds = %@",NSStringFromCGRect(self.view.bounds));
在调试窗口中,我得到:
2011-03-03 10:58:19.376 English Club[63347:207] screen frame = {{0, 0}, {768, 1024}}
2011-03-03 10:58:19.382 English Club[63347:207] screen bounds = {{0, 0}, {768, 1024}}
我无法找出问题所在。任何人都可以帮助我吗?
感谢您的帮助。
答案 0 :(得分:6)
在viewDidLoad
中,视图不应具有其实际大小。稍后通过布局方法设置。但这不应该阻止你:)你如何设置你的自动化掩码?如果你已正确设置,一切都应该没问题。
答案 1 :(得分:4)
如果你等待 - (void)viewDidLayoutSubviews 它的大小合适
答案 2 :(得分:3)
在viewWillAppear而不是viewDidLoad中执行操作。
答案 3 :(得分:2)
我目前正在编写一个UISplitViewController应用程序,并且发现更改详细信息或主视图的大小是被禁止的。它完全负责那些子帧的大小。
与UINavigationController和UITabBarController一样,UISplitViewController是一个“容器”视图控制器,它根据其目的对其子视图进行整形。
函数self debugDumpTheFrames打印出uisplitviewcontroller的帧,它是两个子帧。我在splitViewController的viewDidLoad中打印帧,并设置一个定时器,在2秒后第二次调用此函数(在此期间我什么都不做):
[self debugDumpTheFrames];
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(debugDumpTheFrames) userInfo:nil repeats:NO];
如果我们查看输出,我们可以看到在viewdidload之后的某个时候,UISplitViewController已经改变了它的子视图的帧。
size of splitviewcontrollers view frame {{0, 0}, {748, 1024}}
size of splitviewcontrollers detail view frame {{0, 0}, {768, 1024}}
size of splitviewcontrollers master view frame {{0, 0}, {768, 1024}}
size of splitviewcontrollers view frame {{0, 0}, {748, 1024}}
size of splitviewcontrollers detail view frame {{321, 0}, {703, 748}}
size of splitviewcontrollers master view frame {{0, 0}, {320, 748}}
确切地说,这个调整大小我不确定;但uisplitviewcontroller是这些框架的老板,它们是私人财产,所以触摸它们是商店拒绝的理由。
答案 4 :(得分:1)
是如果您已设置自动调整属性,则应该没问题。
您可以通过笔尖或代码
设置它们self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
...欢呼声
答案 5 :(得分:0)
如果确实需要在viewDidLoad中获得正确的宽度,则可以访问拆分视图控制器并获取详细视图控制器的宽度。
E.g。在斯威夫特:
func getDetailViewSize() -> CGSize {
var detailViewController: UIViewController
if (self.splitViewController?.viewControllers.count > 1) {
detailViewController = self.splitViewController?.viewControllers[1] as! UIViewController
} else {
detailViewController = self.splitViewController?.viewControllers[0] as! UIViewController
}
return detailViewController.view.frame.size
}