以编程方式向Swift 3中的scrollview添加约束

时间:2017-03-12 02:49:19

标签: ios swift uiscrollview

我看到滚动视图的奇怪行为,我试图在设备上水平居中。

我在viewDidLoad()

中设置了一个滚动视图
scrollView = UIScrollView()
scrollView.delegate = self
scrollView.minimumZoomScale = 0.
scrollView.maximumZoomScale = 2.0
scrollView.zoomScale = 1.0
scrollView.contentSize = CGSize(width: width, height: height) 

我已经为我的内容添加了一个containerView。我在这里改变了背景颜色以试图看到发生了什么

containerView = UIView()
containerView.backgroundColor = .black
scrollView.addSubview(containerView)
view.addSubview(scrollView)

为了测试这个,我决定为containerView设置一个前导常量(我稍后将其置于中心位置)。

containerView.translatesAutoresizingMaskIntoConstraints = false
view.addConstraint(NSLayoutConstraint(item: containerView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 50))

视图似乎确实向右移动了50。然而 1)我失去了containerView的背景色 2)containerView似乎不再对手势作出反应

我认为我更聪明,而是将约束添加到scrollView中 - 我保留了颜色和手势,但它并没有向右移动。

2 个答案:

答案 0 :(得分:1)

scrollView和视图控制器视图之间的约束

 NSLayoutConstraint.activate([
            scrollView.topAnchor.constraint(equalTo: self.view.topAnchor),
            scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
            scrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
        ])

scrollView和containerView之间的约束

 NSLayoutConstraint.activate([
        containerView.topAnchor.constraint(equalTo: scrollView.topAnchor),
        containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
        containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor, constant: 50),
        containerView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor)
    ])

希望是有帮助的!

答案 1 :(得分:0)

我在使用scrollView之前遇到了几乎相同的问题。尝试仅使用CGRect登陆容器,就像使用contentSize一样。在这种情况下,translatesAutoresizingMaskConstraint应为true。