使用 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 time 将UIScrollView
和UIImageView
出口分配给视图控制器
将图像分配给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 旁边