2017-08-24 47 views
0

我有三个子视图,如UIView内的UIViewController中的subview1,subview2,subview3。使用iOS中的约束使UIView中的子视图居中

我使用他们的限制,这我使用的中心则显示该按钮被点击时的约束条件是这些,

  • Horizantally集装箱,
  • 垂直于集装箱,
  • 宽度和
  • 高度。

问题:

当我运行应用程序,并单击button一次谈到在正确的位置。但是,当我关闭它,然后再次尝试打开它时,subview改变其本身的位置,并配备在左上方UIViewcontroller

正如你在截图中看到,但我想显示view每次当我点击UIViewcontroller中心中的按钮时。

我很困惑,约束是正确的,但为什么当我们再次打开它时总会改变它的位置。

image

我的代码,

- (IBAction)Precord:(id)sender { 

     _DateView.hidden=NO; 
     [self.DateView bounceIntoView:self.view direction:DCAnimationDirectionLeft]; 
    } 

在故事板的内容是这样的, enter image description here

+0

您需要刷新布局约束。点击按钮后,尝试您的ViewView.layoutIfNeeded() – Basheer

+0

您创建的布局约束将放置子视图在中心。第一次它显示财产。关闭视图并再次添加到父视图后,子视图约束不适用。所以通过在子视图上调用layoutIfNeeded()方法来刷新它们。 – Basheer

+0

请显示一些代码,以便我们可以更好地帮助您,您是以编程方式设置约束还是使用故事板? – 3stud1ant3

回答

0

试试这个

yourSubView.center = CGPointMake(yourMainView.frame.size.width/2, 
          yourMainView.frame.size.height/2); 
+0

不工作兄弟。 @Vikas Rajput – Oneeb

+0

U也给这个框架 –

+0

我刚刚创建了一个子视图和中心位置它和应用的约束,我也用这个子视图的动画。 @Vikas Rajput – Oneeb

0

简单的方法来编程方式添加约束。修改它与您的愿望大小。

注意1:toItem:self,其中self只是您添加子视图的视图。

注意2:必须将子视图添加到自我或子视图中。

subView.translatesAutoresizingMaskIntoConstraints = false 
NSLayoutConstraint(item: subView, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1.0, constant: 0).isActive = true 
NSLayoutConstraint(item: subView, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1.0, constant: 0).isActive = true 
NSLayoutConstraint(item: subView, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 0.5, constant: 0).isActive = true 
NSLayoutConstraint(item: subView, attribute: .width, relatedBy: .equal, toItem: self, attribute: .width, multiplier: 0.5, constant: 0).isActive = true 

我会建议在Storyboard中添加约束。更容易看/读,清除代码和错误验证。

在你的问题上,我会说它是一个动画问题。在添加视图之前,再次运行设置视图框架/约束(重置动画位置修改)的方法。

或者当动画完成时,而不是隐藏视图,将其从超级视图中删除。当你再次需要它时,只需再次添加它。

+0

它提供了一些语法错误,在你写的.isActive = true的代码中,它指出要添加;那里有分号但是当我添加它时会显示另一个错误。 @alegelos – Oneeb

1

这取决于你解雇视图的方式。我只是尝试下面的代码,它对我有用

- (IBAction)btn_Tapped:(id)sender { 
_smallView.hidden = false; 
[_smallView bounceIntoView:self.view direction:DCAnimationDirectionLeft]; 
} 
- (IBAction)hide_Tapped:(id)sender { 
_smallView.hidden = true; 
} 

基本上我只是隐藏了视图。而当btn_Tapped时,每次视图都以弹跳动画显示在中心。让我知道你怎样去!

+0

它改变了魔药。 @Deepika – Oneeb

+0

我自己试过这个代码,它并没有改变我的立场。你是否在任何时候从其父视图中删除视图? – Deepika

+0

不,我不是,但我已经使用了一个动画,当我点击按钮第一次它来到正确的位置,然后它来到左上角。 @Deepika – Oneeb

相关问题