在UIViewController的生命周期中确定UIView的实际大小

时间:2012-10-18 02:07:43

标签: ios uiviewcontroller uiscrollview

我正在使用iOS 4.3。

我有一个UIViewController,其视图只有一个UIToolbar和一个覆盖视图其余部分的子视图。主UIView有弹簧和支柱,使其符合任何形状,子视图也可以。默认情况下,xib处于纵向方向。

我把这个UIViewController放到我的UISplitViewController的右侧。在我显示这个视图控制器之前,我的iPad处于横向状态,并且在整个时间内保持横向...所以要清楚,我不会改变方向。

xib是768w和1004h,所以我的子视图是768w和960h。

-viewDidLoad我的子视图是768x960。

-viewWillAppear我的子视图是768x960。

-viewDidAppear我的子视图是768x960。

但是当我真正在我的iPad上看到它时,UISplitViewController的右侧是704px宽(应该是这样),我的视图以及我的子视图可以验证只有704px宽。

但是,在代码或视图控制器生命周期中,我无法查询self.view或我的子视图,并且看到宽度为704px。

我需要根据整体视图的大小进行一些更改,因为我的子视图是UIScrollView,我想根据self.view的REAL大小更改scrollView.contentSize。

在View Controller生命周期中必须有一些我可以获得我的视图的真实大小。我尝试了framebounds,但他们都一直显示768x906。

NSLog(@"scroll view frame=%@ bounds=%@", NSStringFromCGRect(self.scrollView.frame), NSStringFromCGRect(self.scrollView.bounds));

NSLog(@"view frame=%@ bounds=%@", NSStringFromCGRect(self.view.frame), NSStringFromCGRect(self.view.bounds));

UIViewController *detailVC = [self.splitViewController.viewControllers objectAtIndex:1];
NSLog(@"splitview frame=%@ bounds=%@", NSStringFromCGRect(detailVC.view.frame), NSStringFromCGRect(detailVC.view.bounds));

1 个答案:

答案 0 :(得分:0)

您应该使用 UIViewController 方法viewWillLayoutSubviews。这是更新滚动视图的最佳位置。

请记住,您的视图控制器将以纵向方式启动。在某些时候它会旋转到风景。出于调试目的,您可能希望覆盖willRotateToInterfaceOrientation:duration:didRotateFromInterfaceOrientation:方法。