【发布时间】:2017-08-21 15:14:06
【问题描述】:
我在视图控制器中有一个UIViewScroll(背景颜色为蓝色)。我需要来自 Xib 的UIView(背景颜色为白色)。 Xib 视图有一个带有约束的UILabel(背景颜色为绿色)。现在,问题是UILabel 约束在添加到scrollView 后未应用。如何在不丢失约束的情况下添加UIView?请参考以下截图和代码。
注意:
我只需要更新UIView 的子视图的约束,而不使用NSLayoutConstraints 的IBOutlets。
UIView 在 Xib 上:
代码:
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。我使用UIView 的layer 属性来操作UIView 的高度和宽度。除了改变高度和宽度,我还需要更新UIView 的子视图的约束。
这是一个理解示例。但是,实际上我会添加更多这样的视图。
Github 存储库: https://github.com/RAJAMOHAN-S/ScrollViewTest
所需输出:
【问题讨论】:
-
为什么不以编程方式在配置文件视图中添加标签?还是违反要求?
-
尝试在 viewDidLoad() 方法中将 frame 设置为 profile view。
-
@RAJAMOHAN-S - 你为什么要设置
.layer属性?而且,您需要提供更多信息...您是否希望将 XIB 视图的大小调整为 填充 滚动视图?如果是这样,你打算用什么来控制.contentSize?如果你不希望它完全填满滚动视图,你希望它有多大,你希望它放在哪里?再说一遍,是什么控制了.contentSize? -
OK - 不操作
.layer属性。这不是你想做的,也不会给你想要的结果。相反,您需要在加载的视图上设置.frame或.constraints。您是否仍然无法通过 WsCandy 的回答得到您想要的? -
在您的 GitHub 存储库中,您的 XIB 中的标签上没有设置任何约束。
标签: ios swift uiview uiscrollview