大佬教程收集整理的这篇文章主要介绍了UIImageView 在 UIScrollView 内部剪切,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用以下代码创建包含多个 UIScrollVIEw
的 UIStackVIEw
和 UIImageVIEw
:
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,Trailing: nil)
pageVIEw.wIDthAnchor.consTraint(equalToConstant: wIDth!).isActive = true
您想使用滚动视图的内容和框架布局指南...
对于您添加到堆栈视图的每个图像视图:
这是一个完整的例子:
class ViewController: UIViewController,UIScrollViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// just trying to include what you've shown
let textSV = UILabel()
textSV.BACkgroundColor = .yellow
textSV.text = "textSV"
textSV.textAlignment = .center
let anotherView = UILabel()
anotherView.BACkgroundColor = .cyan
anotherView.text = "anotherView"
anotherView.textAlignment = .center
[textSV,anotherView].forEach {
$0.translatesAutoresizingMaskIntoConsTraints = false
view.addSubview($0)
}
// respect safe area
let safeG = view.safeAreaLayoutGuide
NSLayoutConsTraint.activate([
textSV.topAnchor.consTraint(equalTo: safeG.topAnchor),textSV.leadingAnchor.consTraint(equalTo: safeG.leadingAnchor),textSV.TrailingAnchor.consTraint(equalTo: safeG.TrailingAnchor),textSV.heightAnchor.consTraint(equalToConstant: 60.0),anotherView.leadingAnchor.consTraint(equalTo: safeG.leadingAnchor),anotherView.TrailingAnchor.consTraint(equalTo: safeG.TrailingAnchor),anotherView.bottomAnchor.consTraint(equalTo: safeG.bottomAnchor),anotherView.heightAnchor.consTraint(equalToConstant: 60.0),])
let scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConsTraints = false
scrollView.BACkgroundColor = .green
scrollView.showsHorizontalScrollInDicator = false
scrollView.delegate = self
view.addSubview(scrollView)
// use a stack view to hold and arrange the scrollView's subviews
let stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConsTraints = false
// add the stackView to the scrollView
scrollView.addSubview(stackView)
// use scrollView's Content Layout Guide to define scrollable content
let layoutG = scrollView.contentLayoutGuide
// use scrollView's Frame Layout Guide to define content height (since you want horizontal scrolling)
let frameG = scrollView.frameLayoutGuide
NSLayoutConsTraint.activate([
// consTrain scrollView Top to textSV Bottom
scrollView.topAnchor.consTraint(equalTo: textSV.bottomAnchor),// consTrain scrollView Leading/Trailing to safe area
scrollView.leadingAnchor.consTraint(equalTo: safeG.leadingAnchor),scrollView.TrailingAnchor.consTraint(equalTo: safeG.TrailingAnchor),// consTrain scrollView Bottom to anotherView Top
scrollView.bottomAnchor.consTraint(equalTo: anotherView.topAnchor),// consTrain all 4 sides of the stackView to scrollView's Content Layout Guide
stackView.topAnchor.consTraint(equalTo: layoutG.topAnchor),stackView.bottomAnchor.consTraint(equalTo: layoutG.bottomAnchor),stackView.leadingAnchor.consTraint(equalTo: layoutG.leadingAnchor),stackView.TrailingAnchor.consTraint(equalTo: layoutG.TrailingAnchor),// consTrain stackView's height to scrollView's Frame Layout Guide height
stackView.heightAnchor.consTraint(equalTo: frameG.heightAnchor),])
// add imageViews to the stack view
for _ in 1...8 {
let pageView = UIImageView(image: UIImage(named: "iphone12mockup"))
//let pageView = UIImageView(image: UIImage(named: "sample"))
// set image view BACkground color so you can
// see its frame (since the image will be aspect-fit scaled)
pageView.BACkgroundColor = .systemYellow
pageView.contentMode = .scaleAspectFit
// add it to the stack view
stackView.addArrangedSubview(pageView)
// consTrain its Width to scrollView's Frame Layout Guide Width
pageView.widthAnchor.consTraint(equalTo: frameG.widthAnchor).isActive = true
}
}
}
然后向右滚动一点:
请注意,由于您希望将图像视图设置为 Aspect Fit
,因此我给“pageView”图像视图设置了 .systemYellow
的背景色,以便您可以看到 imageView 框架填充了滚动视图框架的宽度和身高。
编辑 -- 如果您希望图像与其高度成正比,而没有“两侧的空白空间”,则需要设置与其高度成正比的图像视图宽度约束,基于图像大小。
用这个替换“添加图像视图”循环:
// add imageViews to the stack view
for _ in 1...8 {
guard let img = UIImage(named: "iphone12mockup") else {
fatalError("Could not load image!")
}
let pageView = UIImageView()
pageView.image = img
pageView.contentMode = .scaleToFill
// add it to the stack view
stackView.addArrangedSubview(pageView)
// consTrain its Width proportional to the image height
pageView.widthAnchor.consTraint(equalTo: pageView.heightAnchor,multiplier: img.size.width / img.size.height).isActive = true
}
输出将是:
然后向右滚动一点:
以上是大佬教程为你收集整理的UIImageView 在 UIScrollView 内部剪切全部内容,希望文章能够帮你解决UIImageView 在 UIScrollView 内部剪切所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。