在我的应用中,我添加了一个使用UIViewAutosizingMaskFlexibleWidth
从XIB加载的视图,并且仅在以下两种情况之一中获得了所需的结果:
以下是代码:
viewMenuList = [[MenuListController alloc] initWithNibName:@"MenuListController" bundle:[NSBundle mainBundle]];
viewMenuList.view.autoresizingMask = UIViewAutoresizingFlexibleWidth;
self.view.autoresizesSubviews = YES;
[self.view addSubview:viewMenuList.view];
[self.view sendSubviewToBack:viewMenuList.view];
[viewMenuList.view setNeedsLayout];
[viewMenuList.view setNeedsDisplay];
NSLog(@"frame do menu links view %f, %f, %f, %f", self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
NSLog(@"frame do menu list view %f, %f, %f, %f", viewMenuList.view.frame.origin.x, viewMenuList.view.frame.origin.y, viewMenuList.view.frame.size.width, viewMenuList.view.frame.size.height);
控制台中的输出是:
2010-12-07 16:34:22.552 SlideShow_iPad[19352:207] frame do menu links view 0.000000, 0.000000, 1030.000000, 111.000000
2010-12-07 16:34:22.596 SlideShow_iPad[19352:207] frame do menu list view 0.000000, 0.000000, 768.000000, 109.000000
最后一行显示宽度为1030,不是吗?旋转到肖像并返回风景后,它会调整到1030.
最奇怪的是,我在superview中使用相同的技术并且工作。
答案 0 :(得分:0)
您不应混合使用Interface Builder和Objective-C代码来处理调整大小。从代码中删除autoresizingMask和autoresizesSubviews,并仅在Interface Builder中执行这两项操作。您现在可能有冲突的定义。
autoresizingMark: command-3查看大小属性。选中“自动调整大小”部分,动画很好地展示了调整大小的外观。
autoresizesSubviews: command-1查看图纸属性。这是一个复选框。