使用IOS中的约束使UIView中的子视图居中

时间:2017-08-24 10:32:59

标签: ios objective-c autolayout

我在UIViewController内的UIView中有三个子视图,例如subview1,subview2,subview3。

我对它们使用约束,当点击按钮时我在中心显示的约束是这些,

  • Horizantally in Container,
  • 垂直在容器中,
  • 宽度和
  • 高度。

问题:

当我运行应用程序并在button进入正确位置时单击subview。但是当我解雇它并再次尝试打开它时,UIViewcontroller会改变它的位置并进入view左上角

正如您在屏幕截图中看到的那样,但我想在每次点击UIViewcontroller中心中的按钮时显示 - (IBAction)Precord:(id)sender { _DateView.hidden=NO; [self.DateView bounceIntoView:self.view direction:DCAnimationDirectionLeft]; }

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

image

我的代码是,

public void setupcolor() {

    table_desc.getTableHeader().setBackground(new Color(51,122,183));
    table_desc.getTableHeader().setOpaque(false);
    table_desc.getTableHeader().setForeground(Color.BLACK);
    table_desc.getTableHeader().setFont(new java.awt.Font("Noto Sans", 0, 14));

}

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

3 个答案:

答案 0 :(得分:1)

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

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

基本上我只是隐藏视图。并且当btn_Tapped时,每次在中心显示带有弹跳动画的视图时。让我知道你怎么去!

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分:0)

以编程方式添加约束的简单方法。根据您的愿望大小进行修改。

注意1:toItem:self,其中self只是你添加了subView的视图。

注意2:必须将SubView添加到self或自我的subView。

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中添加约束。更易于查看/阅读,清除代码和错误验证器。

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

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