ios - iPhone - 调整图像和两个标签以适应屏幕

标签 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 则图像太高并且也会被裁剪。在代码中更改框架不会改变 View 中的任何内容。我想要的是使用 Aspect fit 制作的尺寸图像,但没有空格。

最佳答案

我终于搞定了。首先,每个人都写到 UIImageView.Frame 应该被修改以缩小图像,但请注意,如果您的 View 是 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)
}

关于ios - iPhone - 调整图像和两个标签以适应屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093676/

相关文章:

iphone - 用于多跨平台使用的音频库 C++(iphone、android...)

ios - 没有 cocoapods 和 fabric API key 的 Swift Crashlytics 不显示仪表板或任何数据

iOS Swift UI 测试点击警报按钮

iOS - 与 Jenkins/FaSTLane 持续集成

ios - 确定 iOS 多人游戏中的最佳主机

iphone - 附近地点查找 Google MAP SDK

iphone - 自定义 UIButton 图片 iOS

ios - (Swift Playground Template) 使用 Swift 5.1 编译的模块无法被 Swift 5.1.3 编译器导入

ios - 如何计算两个日期之间的几十年数

iphone - 在 iPhone OS 中加密 SQLite 数据库文件