5

我正在尝试根据设备是 iPhone 5(高屏幕)还是早期 iPhone 版本(短屏幕)来调整 UIImageView 的大小。下面是我的代码。但是,当我运行该应用程序时,这些说明将被忽略。我怀疑问题是由自动布局约束引起的。如果我关闭这些约束,图像会调整大小,但这会扰乱我的其余布局。无论如何有选择地覆盖自动布局而不是关闭它?

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

}

编辑

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

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

20

做到这一点的一种方法是以编程方式更改您的约束。您可以通过以下方式做到这一点:

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

    在此处输入图像描述

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

    创建约束

  2. 确保更改其他次要约束工作以允许调整图像视图的大小。例如,如果您在此缩略图图像的右侧有一个标签,您需要确保它已设置为标签的宽度将随着图像大小的变化而调整。最重要的是,您要确保在应用程序运行时没有约束冲突,因为如果确实有一些冲突,您可能会收到一条调试消息,提示您必须打破约束才能使应用程序工作,或者更糟的是,约束是不可满足的。

  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;
    }
    
于 2013-01-05T21:05:45.257 回答
2

在这种情况下,我想说的是,您可能希望将顶部空间限制为超级视图,将底部空间限制为超级视图,而不是指定高度。当superview的高度发生变化时,subview的高度也会随之增长。

将 textView 向上和向右移动而不是向下移动将更具挑战性。您可能能够通过不同的约束优先级来实现这种效果,但您最终可能会被激怒。这听起来像是一个不平凡的情况,您最好在运行时以编程方式更新约束。

@Rob 提供了一个不错的观点,即您可以将约束插入 IBOutlets 并稍后以编程方式修改或删除它们。也许这种方法在这种情况下也会结出硕果。

于 2013-01-05T21:11:01.870 回答