是否有可能在Interface Builder中有选择地覆盖布局约束?

hug*_*dan 5 iphone objective-c ios

我正在尝试调整UIImageView的大小,具体取决于设备是iPhone 5(高屏幕)还是早期iPhone版本(更短屏幕).以下是我的代码.但是,当我运行应用程序时,这些指令将被忽略.我怀疑问题是由自动布局约束引起的.如果我关闭这些约束,图像会被调整大小,但会影响我的其余布局.无论如何有选择地覆盖自动布局而不是关闭它?

CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {

    // code for 4-inch screen
    avatarImage.frame = CGRectMake(43, 372, 75, 75);



} else {

    // code for 3.5-inch screen
    avatarImage.frame = CGRectMake(43, 372, 50, 50);

}
Run Code Online (Sandbox Code Playgroud)

编辑

下面是我试图解决的问题的图像.我希望头像图像按比例调整,直到它适合较小的视图.我想以编程方式将文本字段向上移动到标签的右侧.

在此输入图像描述

在此输入图像描述

Rob*_*Rob 20

一种方法是以编程方式更改约束.你可以这样做:

  1. 通过选择图像视图为您的imageview创建高度和宽度约束,然后在Xcode 5中单击 米 按钮:

    在此输入图像描述

    或者,在Xcode的早期版本中,通过单击 中央 按钮:

    创造约束

  2. 确保更改其他,辅助,约束工作允许调整imageview的大小.例如,如果此缩略图图像右侧有标签,则需要确保设置该标签,以便随着图像大小的变化调整标签的宽度.最重要的是,您希望确保在应用程序运行时没有约束冲突,因为如果确实存在一些冲突,您可能会收到一条调试消息,指出必须打破约束才能使应用程序正常工作,或者更糟糕的是,约束不可满足.

  3. IBOutlet为新的高度和宽度约束创建引用.最简单的方法是显示助理编辑器(以便在操作故事板时显示关联的.h文件),然后control从约束拖动到.h文件:

    创建IBOutlets

  4. 然后在您的代码中,您可以更改约束:

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    
    if (screenBounds.size.height >= 568) {
        self.widthConstraint.constant = 75;
        self.heightConstraint.constant = 75;
    } else {
        self.widthConstraint.constant = 50;
        self.heightConstraint.constant = 50;
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • +1的神话般的答案.这是正确的,并以清晰,简洁和彻底的方式解释.这就是为什么我喜欢stackoverflow. (2认同)