如何在swift中的UIScrollView上从xib添加UIView后更新约束?

时间:2017-08-21 15:14:06

标签: ios swift uiview uiscrollview

我在视图控制器中有UIViewScroll(背景颜色为蓝色)。我需要一个来自Xib的UIView(背景颜色为白色)。 Xib视图具有约束UILabel(背景颜色为绿色)。现在,问题是UILabel约束在将其添加到scrollView后未应用。如何在不失去约束的情况下添加UIView?请参阅以下屏幕截图和代码。

注意:

我需要更新UIView子视图的约束,而不使用IBOutlets的{​​{1}}。

Xib上的

NSLayoutConstraints

enter image description here

代码:

UIView

输出:

enter image description here

更新:更多信息

我知道设置scrollView的class ViewController: UIViewController { @IBOutlet var scrollView: UIScrollView! var profileView:UIView! override func viewDidLoad() { super.viewDidLoad() self.profileView = UINib.init(nibName: "ProfileView", bundle: nil).instantiate(withOwner: self)[0] as! UIView self.scrollView.addSubview(self.profileView) } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() self.profileView.layer.frame.size = CGSize(width: self.scrollView.frame.width, height: self.profileView.frame.height) self.profileView.layer.position = CGPoint(x: self.scrollView.frame.width/2, y: (self.profileView.frame.height/2)+10) } } 。我使用contentSize layer属性来操纵UIView的高度和宽度。我还需要更新UIView子视图的约束,而不是更改高度和宽度。

这是理解的一个例子。但是,实际上我将添加更多这样的视图。

Github存储库: https://github.com/RAJAMOHAN-S/ScrollViewTest

必填项:

enter image description here

1 个答案:

答案 0 :(得分:1)

您最好的选择是以编程方式设置self.profileView的约束,我在下面添加了一个示例以帮助您入门。

class TestVC: UIViewController {

    @IBOutlet var scrollView: UIScrollView!

    private var profileView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.profileView = UINib.init(nibName: "ProfileView", bundle: nil).instantiate(withOwner: self)[0] as! UIView
        self.configureProfileView()
    }

    private func configureProfileView() -> Void {

        self.profileView.translatesAutoresizingMaskIntoConstraints = false

        self.scrollView.addSubview(self.profileView)
        self.profileView.widthAnchor.constraint(equalTo: self.scrollView.widthAnchor).isActive = true
        self.profileView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true

        // Pin the profile view to the top of the scrollView
        self.profileView.topAnchor.constraint(equalTo: self.scrollView.topAnchor).isActive = true
    }
}

此处可以找到更多信息:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ProgrammaticallyCreatingConstraints.html