使用段视图控件更改视图

Change view with Segment View Control

我在我的视图控制器中创建了一个视图,它有 UISegmentControl 和一个 UIScrollView

let segmentControl : UISegmentedControl = {
    let segmentItems = ["Personal","Statistics","Calendar"]
    let segmentControl = UISegmentedControl(items: segmentItems)
    segmentControl.selectedSegmentIndex = 0
    segmentControl.addTarget(self, action: #selector(selectIn(sender:)), for: .valueChanged)
    segmentControl.translatesAutoresizingMaskIntoConstraints = false
    return segmentControl
}()

let subView : UIScrollView = {
    let view = UIScrollView()
    view.backgroundColor = .red
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

我在viewDidLoad中添加了

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.navigationBar.isHidden = true

    view.addSubview(segmentControl)
    view.addSubview(subView)
    setLayout()
}

并添加布局如下

func setLayout(){
    NSLayoutConstraint.activate([
        segmentControl.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10),
        segmentControl.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 20),
        segmentControl.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20),
        segmentControl.heightAnchor.constraint(equalToConstant: 30),

        subView.topAnchor.constraint(equalTo: segmentControl.bottomAnchor, constant: 10),
        subView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 20),
        subView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20),
        subView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
    ])
}

并尝试在按下任何 segmentControl 时添加 PersonalView (UIView)

@objc func selectIn(sender: UISegmentedControl){
        subView.addSubview(pvc)
}

我的个人观点如下

class PersonalView: UIView, UICollectionViewDelegate, UICollectionViewDataSource, UITableViewDelegate, UITableViewDataSource {

let tempValueForTable : Int = 10

let todayLabel : UILabel = {
    let label = UILabel()
    label.text = "Today"
    label.font = .montserratSemiBold
    label.textAlignment = .center
    label.backgroundColor = .green
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()

override init(frame: CGRect) {
    super.init(frame: frame)

    addSubview(todayLabel)
    setLayout()

}

private func setLayout(){
    NSLayoutConstraint.activate([
        todayLabel.topAnchor.constraint(equalTo: self.topAnchor),
        todayLabel.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20),
        todayLabel.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20),
        todayLabel.heightAnchor.constraint(equalToConstant: 25),
    ])
}

required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}}

我仍然无法获得视图,在进一步更新中我需要在相同的 ScrollView

中添加更多视图

1.when 您正在使用自动布局约束,您必须在添加后将此设置为 false。

SomeView.translatesAutoresizingMaskIntoConstraints = false

2.After 你添加你的子视图你必须设置它的约束并调用 view.layoutIfNeeded()

subView.addSubview(pvc)
pvc.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
     pvc.trailingAnchor.constraint(equalTo: subView.trailingAnchor),
     pvc.leadingAnchor.constraint(equalTo: subView.leadingAnchor),
     pvc.topAnchor.constraint(equalTo: subView.topAnchor),
     pvc.bottomAnchor.constraint(equalTo: subView.bottomAnchor),
])
view.layoutIfNeeded()