我是iPhone新手。我有一个图像,标题和内容的屏幕:
图像具有动态大小,并且所有文本都可以具有任何长度。我想要实现的是将图像精确地放在屏幕上,并使所有标签只有它们应该的长度。
我有大约5个小时的工作时间:
Lines=0
和Preferred Width=content width
我已经阅读了很多内容,我了解Content Hugging Priority
和Content Compression Resistance Priority
。我知道UIViewContentMode
的差异。我知道我可以手动设置UIImage.frame=CGRectMake(...)
。什么都行不通。我的图像比更高的图像更宽(假设宽度/高度= 3)。如果我有UIViewContentMode=Aspect Fit
,那么我将在图像上方和下方留出空白。如果设置为Aspect fill
,则图片太高并且也会被裁剪。在代码中更改框架不会更改视图中的任何内容。我想要的是使用Aspect fit
制作尺寸的图像,但没有空格。
答案 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)
}