使用 Swift、autolayout 和 SnapKit 使带有 UIImageView 的 UIScrollView 自动缩放内容

Posted

技术标签:

【中文标题】使用 Swift、autolayout 和 SnapKit 使带有 UIImageView 的 UIScrollView 自动缩放内容【英文标题】:Making UIScrollView with an UIImageView scale content automatically using Swift, autolayout and SnapKit 【发布时间】:2016-04-27 11:45:19 【问题描述】:

我在 Interface Builder 中设置了一个视图控制器,具有以下视图结构:

- UIView
   * UIScrollView
      * UIImageView

我想将图像分配给UIImageView,这样滚动视图(及其内容大小)将采用与图像相同的宽度并自动计算高度 根据图像纵横比的内容大小。 (这使得图像在UIScrollView 内可以垂直滚动。)

我正在使用 Swift 和 Interface Builder + SnapKit 来管理自动布局约束。

【问题讨论】:

【参考方案1】:

我设法通过以下方式使用 SnapKit 进行约束:

在 Interface Builder 中,选择视图控制器并通过选择 Editor / Resolve Auto Layout Issues / Add Missing Constraints 来创建所有缺少的约束 手动选择所有生成的约束并从 Attributes Inspector 中选择 Placeholder / Remove at build timeUIScrollViewUIImageView 出口分配给视图控制器 将图像分配给UIImageView

然后实现视图控制器如下:

import UIKit
import SnapKit

class ViewController: UIViewController 
    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() 
        super.viewDidLoad()

        scrollView.snp.makeConstraints  (make) in
            make.edges.equalTo(view)
        

        let ratio = imageView.image!.size.height / imageView.image!.size.width
        imageView.snp.makeConstraints  (make) in
            make.top.equalTo(0.0)
            make.bottom.equalTo(scrollView.snp.bottom)
            make.width.equalTo(view.snp.width)
            make.height.equalTo(scrollView.snp.width).multipliedBy(ratio)
        
    

【讨论】:

以上是关于使用 Swift、autolayout 和 SnapKit 使带有 UIImageView 的 UIScrollView 自动缩放内容的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift、autolayout 和 SnapKit 使带有 UIImageView 的 UIScrollView 自动缩放内容

使用 AutoLayout 以编程方式将 UILabel 添加到 ScrollView (swift)

swift-无法使用 AutoLayout 在 UIScrollView 中居中 UIImageView

Swift + Autolayout:旋转 UILabel,保持在 UIView 旁边

AutoLayout - 使用水平约束保持图像的比例(Swift Xcode 6)

swift autolayout.swift