【发布时间】:2021-06-11 19:21:10
【问题描述】:
我正在尝试使用包含多个UIImageView 的UIStackView 使用此代码创建UIScrollView:
let stackView = UIStackView(frame: .zero)
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.backgroundColor = .green
scrollView.showsHorizontalScrollIndicator = false
scrollView.delegate = self
self.view.addSubview(scrollView)
scrollView.anchor(top: textSV.bottomAnchor, leading: self.view.safeAreaLayoutGuide.leadingAnchor, bottom: anotherView?.topAnchor, trailing: self.view.safeAreaLayoutGuide.trailingAnchor)
scrollView.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width).isActive = true
scrollView.contentInsetAdjustmentBehavior = .never
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.distribution = .equalSpacing
stackView.spacing = 0
scrollView.addSubview(stackView)
stackView.fillSuperview()
for _ in 1...8 {
let pageView = UIImageView(image: UIImage(named: "iphone12mockup"))
pageView.clipsToBounds = true
pageView.contentMode = .scaleAspectFit
pageView.translatesAutoresizingMaskIntoConstraints = false
stackView.addArrangedSubview(pageView)
pageView.anchor(top: stackView.topAnchor, leading: nil, bottom: stackView.bottomAnchor, trailing: nil)
}
问题是 UIImageView 没有调整到scaleAspectFit 并且看起来像这样(看不到完整图像):
编辑
let img = UIImage(named: "iphone12mockup")
let width = img?.size.width
let pageView = UIImageView(image: img)
pageView.clipsToBounds = true
pageView.contentMode = .scaleAspectFit
pageView.translatesAutoresizingMaskIntoConstraints = false
stackView.addArrangedSubview(pageView)
pageView.anchor(top: stackView.topAnchor, leading: nil, bottom: stackView.bottomAnchor, trailing: nil)
pageView.widthAnchor.constraint(equalToConstant: width!).isActive = true
【问题讨论】:
-
如果您不希望
UIImageView水平滚动,您需要明确设置它的宽度,因为在滚动视图中没有“适合”的内容。 -
@ClausJørgensen 我更新了我的代码,我仍然得到相同的结果(你可以在我的帖子下看到编辑)
-
您将其限制为图像宽度 - 这不会改变任何内容。您需要将其限制为滚动视图容器的宽度(即您现在使用
UIScreen.main.bounds.width所做的事情)。滚动视图的全部意义在于您可以在其中包含更大的内容以供滚动,因此如果您不限制至少一个维度,则不能指望图像不会占用所有必要的空间。 -
另外你真的不应该使用
UIScreen.main.bounds.width来限制宽度,这是a) 不好的做法,并且b) 当你旋转设备时会失败。只需将其限制为self.view.safeAreaLayoutGuide.widthAnchor,这样您就可以在横向模式下获得安全的插图(即滚动视图不会落后于缺口) -
@ClausJørgensen 我希望该图像视图彼此相邻且无需分页,并且我希望它们适合滚动视图高度
标签: ios swift objective-c uiview uikit