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

时间:2015-01-22 16:20:55

标签: ios iphone swift interface-builder autolayout

我是iPhone新手。我有一个图像,标题和内容的屏幕: Screen template

图像具有动态大小,并且所有文本都可以具有任何长度。我想要实现的是将图像精确地放在屏幕上,并使所有标签只有它们应该的长度。

我有大约5个小时的工作时间:

  • 工作标签长度,通过设置Lines=0Preferred Width=content width
  • 来实现
  • 不工作的图片,留空格

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

1 个答案:

答案 0 :(得分:1)

最后我把它弄了。首先,每个人都写道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)
}