0

我正在使用 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或我的子视图并看到宽度为 704 像素。

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

在 View Controller 生命周期中必须有某种方式可以让我获得视图的真实大小。我已经尝试过frameand thebounds但它们都一直显示 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));
4

1 回答 1

0

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

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

于 2012-10-18T05:12:49.313 回答