SplitView详细视图返回错误的视图框?
我在iPad应用程序中使用了splitView。详细视图中有2个子视图,根据etail视图边界绘制自己。 问题在于,即使在ipad处于横向模式时,他们也总是将自己吸引到(1024,768)中。SplitView详细视图返回错误的视图框?
顺便说一句 - 如果我打电话然后在肖像模式,然后旋转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}}
我找不到问题出在哪里。谁能帮我?
感谢您的任何帮助。
在viewDidLoad
该视图不应该有其实际大小。这是由布局方法稍后设置的。但是这不应该阻止你:)你如何设置你的自动识别面具?如果你设置正确,一切都应该没问题。
谢谢,我会再次检查它。 – shannoga 2012-01-13 07:32:21
是如果你已经设置会自动调整大小属性应该是确定..
您可以通过笔尖或代码
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
欢呼设置它们...
谢谢,我会尝试 – shannoga 2011-12-12 08:03:17
我目前正在写一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是这些框架的老板,他们是私人物业,所以触摸他们是从商店拒绝的理由。
在viewWillAppear中执行操作而不是viewDidLoad。
,如果你等待 - (无效)viewDidLayoutSubviews 它将有合适的尺寸
如果你确实需要得到在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
}
我也注意到这个奇怪的问题。我会建议向苹果提交一份错误报告 - 这就是我所做的。 http://bugreporter.apple.com – Jasarien 2011-03-03 09:59:48
苹果回答了这个bug提交吗?顺便说一句,你如何将这些子视图添加到主视图?你是否正确设置了它们的autoresize属性?你能向我们展示更多的代码来深入了解你的问题吗?谢谢 – marzapower 2011-06-07 07:34:16
那么,你在这里究竟想要做什么?你想设置详细视图的大小。或内部细节视图中的视图。您可以在详细信息视图中设置视图的框架大小,但不能设置详细信息视图的大小,因为根据splitviewcontroller视图的基本大小将保持标准。如果你有不同的问题,请让我知道。 – AppAspect 2011-06-20 17:34:38