swift 如何以编程方式向启用分页的UIScrollView添加已排列的子视图

de90aj5v  于 5个月前  发布在  Swift
关注(0)|答案(1)|浏览(58)

我只是想创建添加5个视图,只与宽度和scrollView本身的高度分页启用UIScrollView。
我试图添加使用约束,但没有的UIView是appeard.似乎有一个issue与约束,我做了.你能帮我修复它.谢谢!

import UIKit

final class ViewController: UIViewController {
 
    private lazy var scrollView: UIScrollView = {
       
        let view = UIScrollView()
        self.view.addSubview(view)
        view.translatesAutoresizingMaskIntoConstraints = false
        
        NSLayoutConstraint.activate([
        
            view.leftAnchor.constraint(equalTo: self.view.leftAnchor),
            view.rightAnchor.constraint(equalTo: self.view.rightAnchor),
            view.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 46),
            view.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor)
        ])
      
        view.bounces = true
        view.showsHorizontalScrollIndicator = false
        view.showsVerticalScrollIndicator = false
        
        view.alwaysBounceHorizontal = true
        view.alwaysBounceVertical = false
        view.isPagingEnabled = true
          
        view.backgroundColor = UIColor(red: 0.97, green: 0.97, blue: 0.97, alpha: 1.0)
        return view
    }()
 
    
    let colors: [UIColor] = [.lightGray, .systemRed, .systemOrange, .systemBlue, .systemGreen]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.backgroundColor = .white
 
        var previousView: UIView!
        
        for (i, color) in colors.enumerated() {
            
            let view = UIView()
            view.backgroundColor = color
            view.tag = i + 1
            
            scrollView.addSubview(view)
            view.translatesAutoresizingMaskIntoConstraints = false
            
            view.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
            view.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
            view.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
            
            switch i {
                
            case 0:
                view.leftAnchor.constraint(equalTo: scrollView.leftAnchor).isActive = true
                
            case colors.count - 1:
                view.rightAnchor.constraint(equalTo: scrollView.rightAnchor).isActive = true
                fallthrough
                
            default:
                view.leftAnchor.constraint(equalTo: previousView.rightAnchor).isActive = true
            }
            
            previousView = view
            
        }
    }
}

字符串

js4nwp54

js4nwp541#

您丢失了子视图的高度约束。在ScrollView中,始终为水平分页声明equalHeight,为垂直分页声明equalWidth

view.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
view.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
view.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
//Add this, and you can ignore top or bottom anchor
view.heightAnchor.constraint(equalTo: scrollView.heightAnchor).isActive = true

字符串
注意:我更喜欢scrollView里面的stackView,横轴。你可以很容易地删除switch case,stackView会为你做的。

相关问题