UIView的自动调整大小

7

我在一个UITabController中有一个UIView,其中包含一个UITableView

当切换到通话状态栏时,它不会发生任何变化,视图也不会自动调整大小。

它假设正确的大小是基于应用程序启动时是否切换了通话UIStatusBar,但如果在应用程序运行时切换UIStatusBar,则什么都不会改变。

另一个带有UINavigationController的选项卡视图似乎可以很好地调整大小。

以下是代码:

if ([indexPath indexAtPosition:0] == 0 || [indexPath indexAtPosition:0] == 1) {
        if (!airportChooser) {
            airportChooser = [[AirportChooserController alloc] init];
            airportChooser.targetController = self;
            airportChooser.view.autoresizesSubviews = YES;  
            airportChooser.view.autoresizingMask = UIViewAutoresizingFlexibleHeight;
            [airportChooser.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth];
        }
        airportChooser.target = [indexPath indexAtPosition:0];
        [self.parentViewController.parentViewController.view addSubview:airportChooser.view];
        self.parentViewController.parentViewController.view.autoresizesSubviews = YES;
        self.parentViewController.parentViewController.view.contentMode = UIViewContentModeRedraw;
        [self.parentViewController.parentViewController.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth];
        airportChooser.view.contentMode = UIViewContentModeRedraw;
        //[airportChooser open];
    }
2个回答

15

您是否正确设置了 UIView 的自动调整大小掩码?您可以在 Interface Builder 中的“Size”标签中设置它,这是您可以单击的红色线条。

您还可以使用类似以下的代码进行设置:

[view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | 
                          UIViewAutoresizingFlexibleHeight];

同时确保父视图设置了autoresizesSubviews为YES。

您可以在UIView文档中找到更多相关信息。


1
我已经尝试了这两种方法,但仍然没有成功。 现在我正在将视图添加到窗口中(通过使用push view controller修复了之前的示例),并且具有与之前描述的相同效果。 它根据状态栏上的位置在正确的位置添加视图,但一旦打开后就不会调整。 如果我在应用程序完成启动时添加子视图,则可以正常工作, 但是如果我稍后添加它作为用户输入的结果,则无法正常工作。 - msaspence
老板!您让我知道了一个名为“autoresizesSubviews”的属性,真是救了我的一命!我在编写程序时遇到了一个问题,即在Storyboard上创建父视图时,子视图的创建却出现了问题。问题在于子视图要求设置自动调整大小,这让我很头疼,即使我已经正确地设置了它。给您点个赞! - Prasanna

0
尽管klaaspeiter的答案有道理,并且在某些情况下可能是正确的答案,但在我的特定情况下,原因是我使用了addSubview而不是pushViewController:view animated:NO将子视图添加到UINavigationController的视图中。

虽然这是解决问题的一种方法,但当您想要使用addSubview时,它并不是一个解决方案。 :( - msaspence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接