具有正偏移的CenterXAnchor不起作用?

时间:2018-01-01 21:04:38

标签: ios swift

我在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),偏移量有效。

你知道我做错了吗?

1 个答案:

答案 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.