【问题标题】:Autoresizing Not Working Programmatically自动调整大小不能以编程方式工作
【发布时间】:2015-05-02 11:17:30
【问题描述】:

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

自动布局已关闭。

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

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

【问题讨论】:

标签: ios objective-c uiview storyboard autoresizingmask


【解决方案1】:

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

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

感谢您回答我的问题。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 你能描述一下你看到了什么吗?我做了一个简单的测试,它对我有用。
    • drive.google.com/file/d/0Byb4VeRBzTKvY0ZqOEpOOEh6WWM/… 你可以看看这个屏幕截图...
    • 好吧,那是因为iPhone6的屏幕尺寸比你的框框大。查看我的编辑答案
    • 那是正确的......但我想用户自动调整大小,因为它正在通过界面生成器工作但不是以编程方式..
    • 什么意思?您在答案中看到我的编辑了吗?您必须将宽度和原点 y 设置为您的屏幕尺寸...
    【解决方案3】:

    来自

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

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

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

    我认为-

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

    【讨论】:

    • 它的 iphone 6 模拟器。您没有使用自动布局。您需要检查 self.view.frame.size.width 而不是 320 使用当前视图宽度的宽度。
    • Okey... 场景是我使用界面生成器创建框并应用自动调整大小。它适用于所有屏幕尺寸。在这个我们定义框架和自动调整大小......现在我希望以编程方式发生同样的事情。我在哪里定义框架和自动调整大小
    • 你可以查看上面的评论
    • 是的,自动布局已禁用
    • 如果要添加一个与底部对齐并占据主屏幕全宽的视图,则需要将框架的宽度设置为与主屏幕相同,并且不需要灵活宽度.无需调整大小。在底部对齐的情况下,您只需设置底部边距。
    【解决方案4】:

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

    你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多