RootViewController 视图未使用自动布局调整大小

Posted

技术标签:

【中文标题】RootViewController 视图未使用自动布局调整大小【英文标题】:RootViewController's view is not beeing resized with auto layout 【发布时间】:2012-09-27 23:23:13 【问题描述】:

您好,在 ios 6 上使用自动布局时,我的 rootViewController 的“rootView”似乎没有正确调整大小。

我的 rootViewController 是从 nib 加载的,我将它添加到视图层次结构中,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

RootVC *rootVC = [[RootVC alloc] initWithNibName:@"RootVC" bundle:nil];
self.window.rootViewController = rootVC;

return YES; 

但是当我旋转模拟器时,rootVC 的视图不会调整大小。由于您无法在 xib 中对“rootview”设置任何约束,因此我也尝试了此操作,但没有任何效果:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

RootVC *rootVC = [[RootVC alloc] initWithNibName:@"RootVC" bundle:nil];
self.window.rootViewController = rootVC;
NSArray *vConst = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@@"view" : rootVC.view];

NSArray *hConst = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@@"view" : rootVC.view];

[self.window addConstraints:vConst];
[self.window addConstraints:hConst];

return YES;

当我注销 rootvc 视图的帧大小时,它始终是纵向格式 (w:768, h:1024)

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
NSLog(@"%f, %f", self.view.frame.size.width, self.view.frame.size.height);

有人可以告诉我我在这里缺少什么吗?我在这个问题上浪费了几个小时,却一无所获^^

谢谢

【问题讨论】:

【参考方案1】:

iOS 6 的自动布局功能似乎有很多问题。约束中的歧义以及未能禁用视图控制器中的 translatesAutoresizingMaskIntoConstraints 可能会导致很多冲突。因此,通过调用 lldb 中的 autolayoutTrace 方法确保约束中没有歧义:po [[UIWindow keyWindow] _autolayoutTrace] 如果有歧义,您必须解决它们。

【讨论】:

在调用 po [[UIWindow keyWindow] _autolayoutTrace] 之后,它只是打印出整个 UI 层次结构,如何知道是哪一个导致了歧义

以上是关于RootViewController 视图未使用自动布局调整大小的主要内容,如果未能解决你的问题,请参考以下文章

架构 armv7s 的未定义符号:“_OBJC_CLASS_$_ZXingWidgetController”,引用自:使用 Zxing 的 RootViewController.o 中的 objc-c

自定义工具栏tabbar图片

UISplitViewController - BarButton 项目在开始时未显示

从表视图导航到表视图再到表视图 (iOS)

如何获取对子视图的 rootViewController 的引用?

当 rootViewController 不是 UINavigationController 时推送视图