彼此内部的多个滚动视图
Posted
技术标签:
【中文标题】彼此内部的多个滚动视图【英文标题】:Multiple scrollviews inside each other 【发布时间】:2017-11-15 15:19:42 【问题描述】:我在水平滚动视图中有一个垂直分页滚动视图。 水平滚动视图有效,但垂直滚动视图无效。
我在垂直滚动视图上使用了scrollView.contentSize=CGSize(500,2000)
,但它仍然无法正常工作。
现在有什么问题?
我应该说,垂直添加到视图中,以编程方式使用 xib。
这是我的 Main.swift(我没有情节提要):
class test: UIViewController
@IBOutlet weak var scroll: UIScrollView!
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
override func viewDidLayoutSubviews()
let myView3:TourDetailsDescription = TourDetailsDescription(frame: CGRect(x: 0, y: 0, width: scroll.frame.width, height: scroll.frame.height))
myView3.getView().frame.origin.x = CGFloat(2*scroll.frame.width)
scroll.addSubview(myView3)
let img1:UIImageView = UIImageView(image: UIImage(named: "kavir"))
img1.frame = CGRect(x: 0, y: 0, width: 300, height: 600)
myView3.mainScroll.addSubview(img1)
myView3.mainScroll.contentSize = CGSize(width: 300, height: 600)
self.scroll.contentSize = CGSize(width:UIScreen.main.bounds.width * CGFloat(2), height:self.scroll.frame.height)
还有我的 TourDetailsDescription.swift:
类 TourDetailsDescription: UIView
@IBOutlet weak var mainScroll: UIScrollView!
var parent:UIView!
@IBOutlet var contentView: UIView!
override init(frame: CGRect)
super.init(frame: frame)
commitInit()
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
commitInit()
private func commitInit()
Bundle.main.loadNibNamed("TourDetailsDescription", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
func getView()->UIView
return contentView
【问题讨论】:
Can I put a UIScrollView inside another UIScrollView的可能重复 @pascal_AC tnx,但根本没有。 在水平滚动视图之外加载垂直滚动是否有效? @MXV 当然可以。即使它的内部没有从 xib 添加,它的加载。问题是从xib添加滚动视图。你能帮忙吗? 需要更多关于您的结构的信息。 一切都在一个.xib中吗?或者您在 .xib 中有一个“垂直滚动视图”,并且您正在将其加载到已经存在的水平滚动视图中? 【参考方案1】:这可能对你有帮助:),这是在操场上工作
class ScrollingViewController : UIViewController
override func loadView()
let contentView = UIView(frame: CGRect(x: 0, y: 20, width: 2000, height: 200))
contentView.backgroundColor = .green
let scrollView = UIScrollView()
scrollView.contentSize = contentView.frame.size
scrollView.addSubview(contentView)
scrollView.flashScrollIndicators()
scrollView.backgroundColor = .white
let verticalContainerView = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
verticalContainerView.backgroundColor = .blue
let verticalContentView = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 2000))
verticalContentView.backgroundColor = .red
let verticalScrollView = UIScrollView(frame: verticalContainerView.frame)
verticalScrollView.contentSize = verticalContentView.frame.size
verticalScrollView.addSubview(verticalContentView)
scrollView.flashScrollIndicators()
verticalScrollView.backgroundColor = .white
verticalContainerView.addSubview(verticalScrollView)
contentView.addSubview(verticalContainerView)
self.view = scrollView
PlaygroundPage.current.liveView = ScrollingViewController()
【讨论】:
我想从 xib 添加它。我认为问题出在约束和自动调整大小 看一下设置,以及滚动视图内的内容视图,这些视图是在可滚动视图内设置大小的视图以上是关于彼此内部的多个滚动视图的主要内容,如果未能解决你的问题,请参考以下文章
水平 UIScrollView 内部有垂直 UIScrollViews - 滚动外部水平视图时如何防止滚动内部滚动视图?