我在视图控制器中有UIViewScroll
(背景颜色为蓝色)。我需要一个来自Xib的UIView
(背景颜色为白色)。 Xib视图具有约束UILabel
(背景颜色为绿色)。现在,问题是UILabel
约束在将其添加到scrollView
后未应用。如何在不失去约束的情况下添加UIView
?请参阅以下屏幕截图和代码。
注意:
我需要更新UIView
子视图的约束,而不使用IBOutlets
的{{1}}。
NSLayoutConstraints
:
代码:
UIView
输出:
更新:更多信息
我知道设置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
必填项:
答案 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
}
}