我在ViewController中创建了一个视图并创建了一个Outlet。该视图称为" chatView"。 我想在主视图加载后直接隐藏视图(并在用户单击按钮后的一段时间内将其滑入)。
我的方法是操纵centerXAnchor约束:
override func viewDidLoad() {
super.viewDidLoad()
view.insertSubview(chatView, belowSubview: view)
chatView.translatesAutoresizingMaskIntoConstraints = false
chatCenterX = chatView.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 1500)
chatCenterX.isActive = true
}
但由于任何原因(我不知道为什么),加载视图时已经显示了chatView,因此未设置偏移量。
我尝试了一些其他的东西,并检测到如果我将其设置为负值(我尝试-1500而不是1500),偏移量有效。
你知道我做错了吗?
答案 0 :(得分:1)
将您在storyboard中添加的约束拖动为IBOutlet并更改其常量值,以便根据需要向前或向后移动视图
注意:在viewDidLayoutSubviews中更改它我首先使用布尔值启动,以便在您想要显示它时不要隐藏,而不是在viewDidLoad
中Apple说:
<强> viewDidLayoutSubviews 强>()
当视图控制器视图的边界发生变化时,视图 调整其子视图的位置,然后系统调用它 方法。但是,调用此方法并不表示该方法 已调整视图子视图的各个布局。每 subview负责调整自己的布局。
您的视图控制器可以覆盖此方法以进行更改 该视图列出了其子视图。这个的默认实现 方法什么都不做。
因此每次调用viewDidLayoutSubviews,这就是我们为函数添加布尔变量的原因。
override func viewDidLayoutSubviews
{
if(once)
{
once = false
self.chatViewCenterX.constant = 1500
self.view.layoutIfNeeded()
}
}
再次显示
self.chatViewCenterX.constant = 0
self.view.layoutIfNeeded() // viewDidLayoutSubviews is called here.