彼此内部的多个滚动视图

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 添加它。我认为问题出在约束和自动调整大小 看一下设置,以及滚动视图内的内容视图,这些视图是在可滚动视图内设置大小的视图

以上是关于彼此内部的多个滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在放大滚动视图Objective-C时聚焦特定视图

水平 UIScrollView 内部有垂直 UIScrollViews - 滚动外部水平视图时如何防止滚动内部滚动视图?

在调整滚动视图大小时滚动到滚动视图页面

滚动其他滚动视图时滚动视图重置

嵌套 UIScrollViews 中的滚动问题

使用包含启用缩放的滚动视图的滚动视图进行分页