自动调整大小不以编程方式工作

Autoresizing Not Working Programmatically

我想创建一个 UIView,它将根据 iPhone 屏幕大小调整宽度,并且它应该保留在视图底部。

我用故事板创建了新项目并添加了以下代码。

这是我的代码

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:true];

    UIView *box = [[UIView alloc]initWithFrame:CGRectMake(0, 448, 320, 120)];
    [box setBackgroundColor:[UIColor redColor]];

    [box setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
    [box setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
    [box setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
    [box setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
    [box setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];

    [self.view addSubview:box];
}

自动布局已关闭。

如果我通过从界面生成器应用自动调整大小来做同样的事情,那么它工作得很好。

我不明白为什么它不起作用。

您正在覆盖所有调整大小的蒙版。

你可以这样做:

[box setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];

这是一个面具,试试这个:

[box setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth |
 UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];
  • 此外,如果您希望高度不变,请删除 UIViewAutoresizingFlexibleHeight

编辑

要为任何设备尺寸设置它,请执行以下操作:

CGRect fr = box.frame;
fr.size.width = self.view.frame.size.width;
fr.origin.y = self.view.frame.size.height - 120;
box.frame = fr;

来自

 

仅设置 (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) 等同于:

代码中的设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)等同于:

我认为 -

你只需要设置灵活的宽度和灵活的底部,因此它的效果是相反的。不要使用灵活的高度。如果您需要使用灵活的高度,那么不要分配灵活的顶部和灵活的宽度,而是分配灵活的宽度、灵活的高度和灵活的底部。所以它会删除最上面的一个。如果分配了灵活的宽度和灵活的高度,请参阅分配左上右下删除相应的内容。现在你应该照做。我认为这会有所帮助。

我这边的小错误。 我的代码是正确的。

此问题与 xCode 6.1 有关,在启动屏幕中我们有来自 xCode 6 的 xib 文件,因此我必须从常规设置 -> 应用程序图标和启动图像中删除对它的引用,然后使用 Assert Catalog 而不是 launchscreen.xib 它开始工作....

无论如何感谢您回答我的问题。