2015-10-24 105 views
1

我想将1个视图添加到CallOutViewpushButton应该在底部,静态高度为20.然后topView应该填充其余部分。我试图用编程方式使用SnapKit来做到这一点。但是,似乎按钮只是填满了一切?我究竟做错了什么?使用编程方式在视图中创建2个视图

 callOutView = UIView(frame: CGRectMake(-70+(self.frame.width/2), -65, 140, 60)) 
     callOutView!.backgroundColor = UIColor.clearColor() 
     callOutView?.clipsToBounds = true 
     callOutView?.layer.cornerRadius = 6 
     self.addSubview(callOutView!) 

     let topView = UIView() 
     topView.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.8) 
     callOutView?.addSubview(topView) 


     let pushButton = UIButton() 
     pushButton.backgroundColor = UIColor(rgba: "#09316e").colorWithAlphaComponent(0.8) 
     pushButton.setTitle("Se Mere", forState: UIControlState.Normal) 
     pushButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 
     pushButton.titleLabel?.font = UIFont.systemFontOfSize(8) 
     callOutView?.addSubview(pushButton) 

     topView.snp_makeConstraints { (make) -> Void in 
      make.top.equalTo(callOutView!).offset(0) 
      make.left.equalTo(callOutView!).offset(0) 
      make.bottom.equalTo(pushButton).offset(0) 
      make.right.equalTo(callOutView!).offset(0) 
      make.height.equalTo(40) 

     } 

     pushButton.snp_makeConstraints { (make) -> Void in 
      make.height.equalTo(20) 
      make.top.equalTo(topView).offset(0) 
      make.left.equalTo(callOutView!).offset(0) 
      make.bottom.equalTo(0).offset(0) 
      make.right.equalTo(callOutView!).offset(0) 

     } 

回答

0

问题是存在一些彼此冲突的约束,这会使自动布局系统破坏其中的一些。

topView.snp_makeConstraints { (make) -> Void in 
    ... 
    make.bottom.equalTo(pushButton).offset(0) 
    ... 
} 


pushButton.snp_makeConstraints { (make) -> Void in 
    ... 
    make.top.equalTo(topView).offset(0) 
    ... 
} 

上述告知自动布局系统的两个约束:

  1. 地点topViewpushButton与顶部边缘对齐。
  2. 地方topViewpushButton底部边缘对齐。

如果你给topViewpushButton不同的高度,这是不可能的。

另外,这不是你想要的。你想要的是“的地方pushButton正确的topView“。

下面是修改后的代码,以使pushButton放在右下面的topView

topView.snp_makeConstraints { (make) -> Void in 
    ... 
    make.bottom.equalTo(pushButton.snp_top).offset(0) 
    ... 
} 


pushButton.snp_makeConstraints { (make) -> Void in 
    ... 
    make.top.equalTo(topView.snp_bottom).offset(0) 
    ... 
} 
相关问题