一旦添加子视图,UIScrollview将不起作用

时间:2018-11-27 00:02:25

标签: swift scrollview

我是使用ScrollViews的新手,并且我正在以编程方式进行所有操作。我肯定缺少一些超级简单的东西,但是当我没有子视图时,scrollview会正确显示并上下滚动。但是,每当我添加任何子视图时,整件事都根本不会出现。

class DetailedPostScrollView: UIScrollView {

let topLabel: UILabel = {
    let label = UILabel()
    label.text = "this is the top"
    return label
}()

let bottomLabel: UILabel = {
    let label = UILabel()
    label.text = "this is the bottom"
    return label
}()

override init(frame: CGRect) {
    super.init(frame: frame)
    contentSize = CGSize(width: frame.width, height: 2000)
    alwaysBounceVertical = true

    addSubviewUsingAutoLayout(topLabel, bottomLabel)
    topLabel.centerXAnchor.constrain(to: self.centerXAnchor)
    topLabel.widthAnchor.constrain(to: 200)
    topLabel.heightAnchor.constrain(to: 50)
    topLabel.topAnchor.constrain(to: self.topAnchor, with: 100)

    bottomLabel.centerXAnchor.constrain(to: self.centerXAnchor)
    bottomLabel.widthAnchor.constrain(to: 200)
    bottomLabel.heightAnchor.constrain(to: 50)
    bottomLabel.bottomAnchor.constrain(to: self.bottomAnchor)

}

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

}

然后在我的viewController中实例化并添加滚动视图

let detailedPostScrollView = DetailedPostScrollView(frame: UIScreen.main.bounds)
    detailedPostScrollView.backgroundColor = UIColor.purple
    view.addSubviewUsingAutoLayout(detailedPostScrollView)

同样,我确定这是一件非常简单的事情,但我检查了所有问题和教程视频,但看不到我要去哪里。感谢您的帮助。

编辑:当我从一个视图控制器中以编程方式完成所有操作时,似乎工作正常,如下所示:

 let scrollView: UIScrollView = {
        let sv = UIScrollView()
        sv.contentSize = CGSize(width: view.frame.width, height: 2000)
        sv.backgroundColor = UIColor.purple
        return sv
    }()

    view.addSubviewUsingAutoLayout(scrollView)
    scrollView.topAnchor.constrain(to: view.topAnchor, with: 100)
    scrollView.leadingAnchor.constrain(to: view.leadingAnchor)
    scrollView.trailingAnchor.constrain(to: view.trailingAnchor)
    scrollView.bottomAnchor.constrain(to: view.bottomAnchor)

    let topLabel: UILabel = {
        let label = UILabel()
        label.text = "this is the top"
        return label
    }()

    scrollView.addSubviewUsingAutoLayout(topLabel)
    topLabel.centerXAnchor.constrain(to: scrollView.centerXAnchor)
    topLabel.widthAnchor.constrain(to: 200)
    topLabel.heightAnchor.constrain(to: 50)
    topLabel.topAnchor.constrain(to: scrollView.topAnchor)

当我创建一个自定义滚动视图并在vc中实例化它时,发生了什么事。

1 个答案:

答案 0 :(得分:0)

尝试一下:

class ViewController : UIViewController , UIScrollViewDelegate{
    var scrollView : UIScrollView! ;
    var containerView = UIView();
    var contentSize : CGSize {
        get {
            return CGSize(width: view.frame.width, height: 2000);
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad();
        setupScrollView();
        setupItems();
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews();
        self.scrollView.frame = self.view.bounds;
        containerView.frame = CGRect(x: 0, y: 0, width: contentSize.width, height: contentSize.height);
    }

    private func setupScrollView() {
        scrollView = UIScrollView();
        scrollView.delegate = self;
        scrollView.backgroundColor = .white;
        scrollView.contentSize = contentSize;
        self.view.addSubview(scrollView);

        containerView.backgroundColor = .purple;
        self.scrollView.addSubview(containerView);
    }
    private func setupItems() {
        let topButton = UIButton();
        topButton.translatesAutoresizingMaskIntoConstraints = false;
        topButton.setTitle("TOP BUTTON", for: .normal);
        topButton.setTitleColor(.white, for: .normal);
        self.containerView.addSubview(topButton);

        let bottomTextField = UITextField();
        bottomTextField.translatesAutoresizingMaskIntoConstraints = false;
        bottomTextField.borderStyle = .roundedRect;
        bottomTextField.placeholder = "BOTTOM TEXT FIELD";
        self.containerView.addSubview(bottomTextField);

        topButton.centerXAnchor.constraint(equalTo: containerView.centerXAnchor).isActive = true;
        topButton.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 50).isActive = true;
        topButton.widthAnchor.constraint(equalToConstant: 100).isActive = true;
        topButton.heightAnchor.constraint(equalToConstant: 50).isActive = true;

        bottomTextField.centerXAnchor.constraint(equalTo: containerView.centerXAnchor).isActive = true;
        bottomTextField.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -50).isActive = true;
        bottomTextField.widthAnchor.constraint(equalToConstant: 200).isActive = true;
        bottomTextField.heightAnchor.constraint(equalToConstant: 40).isActive = true;
    }

}

将滚动视图框架设置为在viewDidLayoutViews中绑定的视图,而不使用布局,然后将容器视图添加为滚动视图的子视图,并在{{1 }}因此,每当用户旋转手机时,他都会获得正确的宽度,最后将所有视图添加到容器视图中。