iPhone - 调整图像和两个标签的大小以适合屏幕
Posted
技术标签:
【中文标题】iPhone - 调整图像和两个标签的大小以适合屏幕【英文标题】:iPhone - resizing image and two labels to fit the screen 【发布时间】:2015-01-22 16:20:55 【问题描述】:我是 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
制作的大小的图像,但没有空格。
【问题讨论】:
Aspect fit,顾名思义,将保持图像的纵横比,并在图像视图中适应整个图像。但是,由于您的图像超宽,因此无法像您想要的那样垂直调整它的大小并且仍然保持纵横比。我不认为你想做的事是可能的 【参考方案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)
【讨论】:
以上是关于iPhone - 调整图像和两个标签的大小以适合屏幕的主要内容,如果未能解决你的问题,请参考以下文章
将带有图像背景的 UI Button 缩放为 iphone 大小