iPhone - 调整图像和两个标签的大小以适应屏幕
iPhone - resizing image and two labels to fit the screen
我是 iPhone 开发新手。我有一个包含图像、标题和内容的屏幕:
图片有动态大小,所有文本也可以有任意长度。我想要实现的是使图像完全适合屏幕,并使所有标签的长度都达到应有的长度。
经过大约 5 个小时的工作,我有:
- 工作标签长度,通过设置
Lines=0
和Preferred Width=content width
实现
- 图片无效,留下空白 spaces
我读了很多书,我明白了Content Hugging Priority
和Content 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)
}
我是 iPhone 开发新手。我有一个包含图像、标题和内容的屏幕:
图片有动态大小,所有文本也可以有任意长度。我想要实现的是使图像完全适合屏幕,并使所有标签的长度都达到应有的长度。
经过大约 5 个小时的工作,我有:
- 工作标签长度,通过设置
Lines=0
和Preferred Width=content width
实现
- 图片无效,留下空白 spaces
我读了很多书,我明白了Content Hugging Priority
和Content 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)
}