UIViewController 中的帧大小问题
Posted
技术标签:
【中文标题】UIViewController 中的帧大小问题【英文标题】:frame size issue in UIViewController 【发布时间】:2012-07-20 04:25:35 【问题描述】:所以我想添加一个宽度为 450 和屏幕高度的 UIViewController,所以如果它是纵向的,那么高度是 1024,如果是横向,那么高度是 768。这个名为 ProfileViewController 的视图控制器有一个已设置的 xib在 450 和 1024。自动调整大小设置为具有灵活的高度。
profViewController = [[ProfileViewController alloc] initWithNibName:@"ProfileViewController" bundle:nil];
self.profileViewController_ = profViewController;
[profViewController release];
所以在 ProfileViewController 中,我还初始化了另一个名为 FeedsViewController 的视图控制器。现在的问题是,在 profViewController viewDidLoad 中,无论方向如何,高度始终设置为 1024。我怎样才能让它适应我的方向?我已经尝试设置 profViewController 的边界,但是这个更改会在 viewDidLoad 之后反映出来。
【问题讨论】:
【参考方案1】:如果您以与在 NIB 中设置 ProfileViewController
视图的框架相同的方式设置 FeedsViewController
视图的框架,那么事物应该会自动正确调整大小。也就是说,你给它一个你想要的相对于外部视图的初始大小,然后让系统的自动调整大小行为从那里获取东西。
在ProfileViewController
的viewDidLoad
中尝试这样的事情:
// create and init self.feedsViewController
// ...
CGRect b = self.view.bounds;
self.feedsViewController.view.frame = CGRectMake((b.size.width - 450) / 2, 0, 450, b.size.height);
self.feedsViewController.view.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
【讨论】:
【参考方案2】:要找到高度和宽度,试试这个
CGRect screenRect = [[UIScreen mainScreen] bounds]; CGFloat screenWidth = screenRect.size.width; CGFloat screenHeight = screenRect.size.height;
【讨论】:
这不是我想要的......我希望它是自动的【参考方案3】:覆盖profViewController的以下方法
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, 450, 1024);
else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, 450, 768);
【讨论】:
【参考方案4】:如果你想改变你的tableview框架,你应该在viewDidAppear:
而不是viewDidLoad:
进行。
【讨论】:
以上是关于UIViewController 中的帧大小问题的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法为 UIScrollView 中的不同图层设置不同的帧大小?
如何在 Interface Builder 中的 UIViewController 中自动调整 UIView Outlet 的大小