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

时间:2015-03-02 06:51:27

标签: ios objective-c uiview storyboard autoresizingmask

我想创建一个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];
}

自动布局关闭。

如果我通过从界面构建器应用自动调整来做同样的事情,那么它的工作正常。

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

4 个答案:

答案 0 :(得分:2)

来自

http://stackoverflow.com/q/7754851/4030971 

仅设置(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)相当于:

enter image description here

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

enter image description here

我认为 -

您需要设置灵活的宽度和灵活的底部,因此它的效果相反。不要使用灵活的高度。如果你需要使用灵活的高度,那么而不是指定灵活的宽度灵活的顶部分配灵活的宽度,灵活的高度和灵活的底部。所以它将删除顶部的一个。请参阅指定左上方顶部,删除相应的if柔性宽度和灵活高度。现在你应该做。我认为这会有所帮助。

答案 1 :(得分:0)

您正在覆盖所有调整大小的面具。

你可以这样做:

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

答案 2 :(得分:0)

这是一个面具,尝试这样做:

[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;

答案 3 :(得分:0)

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

问题与xCode 6.1有关,在启动画面中我们有来自xCode 6的xib文件,所以我必须从General Setting->中删除它的引用。 App Icon和Launch Images并使用Assert Catalog而不是launchscreen.xib,它开始工作....

无论如何,谢谢回复我的问题。