旋转后从XIB加载时自动调整不起作用

时间:2010-12-07 18:45:52

标签: iphone objective-c ipad iphone-sdk-3.2

在我的应用中,我添加了一个使用UIViewAutosizingMaskFlexibleWidth从XIB加载的视图,并且仅在以下两种情况之一中获得了所需的结果:

  1. 在纵向上添加子视图,并旋转到横向,正确调整子视图的大小;
  2. 在横向上添加子视图不会导致子视图以旋转时的方式调整其宽度;
  3. 以下是代码:

    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中使用相同的技术并且工作。

1 个答案:

答案 0 :(得分:0)

您不应混合使用Interface Builder和Objective-C代码来处理调整大小。从代码中删除autoresizingMask和autoresizesSubviews,并仅在Interface Builder中执行这两项操作。您现在可能有冲突的定义。

autoresizingMark: command-3查看大小属性。选中“自动调整大小”部分,动画很好地展示了调整大小的外观。

autoresizesSubviews: command-1查看图纸属性。这是一个复选框。