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

Posted

技术标签:

【中文标题】iPhone - 调整图像和两个标签的大小以适合屏幕【英文标题】:iPhone - resizing image and two labels to fit the screen 【发布时间】:2015-01-22 16:20:55 【问题描述】:

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

图像具有动态大小,并且所有文本都可以具有任意长度。我想要实现的是使图像完全适合屏幕,并使所有标签的长度与它们应该的一样长。

在我工作了大约 5 个小时之后:

工作标签长度,通过设置Lines=0Preferred Width=content width实现 图像无效,会留下空白

我读了很多,我了解Content Hugging PriorityContent 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 - 调整图像和两个标签的大小以适合屏幕的主要内容,如果未能解决你的问题,请参考以下文章

调整UIImageView的大小以包装“适合方面”的图像

旋转和调整图像大小 + iPhone

将带有图像背景的 UI Button 缩放为 iphone 大小

无法让 UIImageView 调整大小以适应屏幕

iOS - 需要为不同的 iPhone 调整按钮和图像的大小

SpriteKit SKScene 未正确调整大小以适合 iPhone 12