iphone - 是否可以有选择地覆盖 Interface Builder 中的布局约束?

标签 iphone objective-c ios

我正在尝试根据设备是 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);

}

编辑

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

enter image description here

enter image description here

最佳答案

执行此操作的一种方法是以编程方式更改您的约束。您可以通过以下方式执行此操作:

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

    enter image description here

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

    create constraints

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

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

    create 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;
    }
    

关于iphone - 是否可以有选择地覆盖 Interface Builder 中的布局约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175960/

相关文章:

ios - ld : framework not found FileProvider for architecture x86_64 in Xcode 8. 3.2

ios - 如何在 objective-c ios 中以整数形式获取当前年份的当前日期

ios - 如何删除特定的 UICollectionViewCell 图像。按下特定图像上的按钮时

android - 多平台软件的最佳语言

iphone - 什么决定了 CALayer.position 的初始值?

iphone - UINavigationbar提示与屏幕内容重叠

iphone - 如何获取 nscoder 的 key

objective-c - 减少内存大小以确保 iOS 中的后台运行

objective-c - 我应该如何正确释放这个 NSString ?

ios - 使用 SKScene 呈现 ViewController 时暂停