gpt4 book ai didi

ios - 以编程方式设置带有约束的 UIScrollView 的正确方法?

转载 作者:行者123 更新时间:2023-11-28 15:18:05 27 4
gpt4 key购买 nike

我正在尝试使用约束以编程方式在并排放置的两个 View Controller 之间创建一个简单的水平滚动。我这里的内容似乎有效,但我读过的所有内容都表明,如果约束设置正确,我不需要配置 contentSize 的大小——autolayout 会为我做这件事。但是当我从 viewWillLayoutSubviews 中删除 scrollView.contentSize = CGSize(width: view.bounds.width * 2, height: view.bounds.height) 时,它不会滚动.我哪里出错了?

class ViewController0: UIViewController {


let scrollView = UIScrollView()
let contentView = UIView()
let page1 = ViewController1()
let page2 = ViewController2()


override func loadView() {

setView()
addScrollView()
fillScrollView()

}


override func viewDidLoad() {
super.viewDidLoad()
}


override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

scrollView.contentSize = CGSize(width: view.bounds.width * 2, height: view.bounds.height)

}


func setView() {

view = UIView()
view.frame = UIScreen.main.bounds
view.backgroundColor = UIColor.blue

}


func addScrollView() {

scrollView.bounces = false
scrollView.isPagingEnabled = true
scrollView.backgroundColor = UIColor.brown
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)

scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

contentView.backgroundColor = UIColor.green
contentView.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(contentView)

contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
contentView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
contentView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 1).isActive = true
contentView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 2).isActive = true

}


func fillScrollView() {

addChildViewController(page1)
page1.didMove(toParentViewController: self)
page1.view.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(page1.view)
page1.view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).isActive = true
page1.view.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
page1.view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
page1.view.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1).isActive = true

addChildViewController(page2)
page2.didMove(toParentViewController: self)
page2.view.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(page2.view)
page2.view.leadingAnchor.constraint(equalTo: page1.view.trailingAnchor).isActive = true
page2.view.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
page2.view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
page2.view.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1).isActive = true

}


}

最佳答案

这应该可行

    class ViewController0: UIViewController {

let scrollView = UIScrollView()
let page1 = ViewController1()
let page2 = ViewController1()

override func loadView() {
setView()
addScrollView()
setupPage()
}

func setView() {

view = UIView()
view.frame = UIScreen.main.bounds
view.backgroundColor = UIColor.blue

}

func addScrollView() {

scrollView.backgroundColor = UIColor.brown
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}

func setupPage() {
page1.view.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(page1.view)
addChildViewController(page1)
page1.didMove(toParentViewController: self)

page2.view.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(page2.view)
addChildViewController(page2)
page2.didMove(toParentViewController: self)

let views: [String: UIView] = ["view": view, "page1": page1.view, "page2": page2.view]
let verticalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|[page1(==view)]|", options: [], metrics: nil, views: views)
let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[page1(==view)][page2(==view)]|", options: [.alignAllTop, .alignAllBottom], metrics: nil, views: views)

NSLayoutConstraint.activate(verticalConstraints + horizontalConstraints)
}

}

关于ios - 以编程方式设置带有约束的 UIScrollView 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com