iPhone - 调整图像和两个标签的大小以适应屏幕

iPhone - resizing image and two labels to fit the screen

我是 iPhone 开发新手。我有一个包含图像、标题和内容的屏幕:

图片有动态大小,所有文本也可以有任意长度。我想要实现的是使图像完全适合屏幕,并使所有标签的长度都达到应有的长度。

经过大约 5 个小时的工作,我有:

我读了很多书,我明白了Content Hugging PriorityContent Compression Resistance Priority。我知道 UIViewContentMode 的差异。我知道我可以手动设置 UIImage.frame=CGRectMake(...)。什么都不管用。我的图像比高更宽(假设 width/height = 3)。如果我有 UIViewContentMode=Aspect Fit 那么我将在图像上方和下方留有空白 space。如果设置为 Aspect fill 则图像太高并且也会被裁剪。在代码中更改框架不会改变视图中的任何内容。我想要的是使用 Aspect fit 制作的尺寸图像,但没有空白 space.

我终于搞定了。首先,每个人都写到 UIImageView.Frame 应该被修改以缩小图像,但要注意,如果你的视图是 UITableViewCell 那么你应该在 layoutSubviews 方法中这样做(记得调用super.layoutSubviews()在乞讨处)。

其次,在 IB 中为您的 UIImageView 临时值(例如 100)设置一个高度限制。您将在 layoutSubviews 方法中更改该约束。

最后:拟合图像与比例无关。设置 UIViewContentMode=Aspect Fit。那么只有当初始图像比屏幕宽时,才会出现顶部和底部区域空白的情况。计算适当的高度也应该在 layoutSubviews.

中进行

示例实现:

override func layoutSubviews() {
    super.layoutSubviews()
    var imageWidth = (imageViewObject.image?.size.width)!
    var imageHeight = (imageViewObject.image?.size.height)!
    var frameWidth = UIScreen.mainScreen().bounds.width
    var properHeight: CGFloat

    if imageWidth > frameWidth {
        var ratio = frameWidth / imageWidth
        properHeight = imageHeight * ratio
    }
    else {
        properHeight = imageHeight
    }

    imageHeightConstraint.constant = properHeight
    imageViewObject.frame = CGRectMake(0, 0, frameWidth, properHeight)
}