2015-07-20 52 views
1

我试图在我的ScrollView中以编程方式添加约束,但无法正常工作。问题是它不适用于我的标签和按钮的前导和尾随。以动态按钮在UIScrollView中以编程方式添加约束 - Swift

我想放在一个滚动视图第一个标签和下面的标签,例如10动态按钮。

的代码是:

var buttons : [UIButton] = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    //Create controller and get view 
    //var controller = UIViewController() 
    var view = self.view 
    var tag:String 
    var count = 0 

    //Create and layout scroll view 
    var scrollView = UIScrollView() 
    scrollView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    view.addSubview(scrollView) 
    view.addConstraint(NSLayoutConstraint(item: scrollView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0.0)) 
    view.addConstraint(NSLayoutConstraint(item: scrollView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0.0)) 
    view.addConstraint(NSLayoutConstraint(item: scrollView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0.0)) 
    view.addConstraint(NSLayoutConstraint(item: scrollView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0.0)) 

    //Create and add content view 
    var contentView = UIView() 
    contentView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    scrollView.addSubview(contentView) 
    scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0.0)) 
    scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0.0)) 
    scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0.0)) 
    scrollView.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0.0)) 

    //Contraint contentView and view 
    view.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0.0)) 
    view.addConstraint(NSLayoutConstraint(item: contentView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0.0)) 

    //Add Label 
    var preguntaLabel = UILabel() 
    preguntaLabel.numberOfLines = 0 
    preguntaLabel.text = "tenemos al mejor del mundo, que va y hace cuatro goles con el Real Sociedad, y viene acá y no la toca. Vos decís, pero la puta, ¿sos argentino o sueco? Que se dejen de romper las pelotas los que dicen ‘a Messi hay que mimarlo’. A Messi hay que tratarlo como a todo jugador que se pone la camiseta de la Selección. Como el mejor del mundo, para lo bueno y lo malo. Pero ojo que tampoco Messi mató, violó, no hagamos una novela" 
    preguntaLabel.setTranslatesAutoresizingMaskIntoConstraints(false) 
    contentView.addSubview(preguntaLabel) 

    //contraits leading y trailing 
    contentView.addConstraint(NSLayoutConstraint(item: preguntaLabel, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 5.0)) 
    contentView.addConstraint(NSLayoutConstraint(item: preguntaLabel, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 5.0)) 

    //contraits top 
    contentView.addConstraint(NSLayoutConstraint(item: preguntaLabel, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 15.0)) 

    for var i=0;i<10;i++ 
    { 
     //Create all buttons 
     var btn = UIButton.buttonWithType(UIButtonType.System) as! UIButton 
     btn.backgroundColor = UIColor.greenColor() 
     btn.setTitle("hola"+String(i), forState: UIControlState.Normal) 
     btn.titleLabel?.numberOfLines = 0 
     buttons.append(btn) 
    } 
     //Add buttons to view with constraints 
     var prevButton:String 
     var constH:NSArray 
     var constV:NSArray 
     var hString:String 
     var vString:String 
     var index = 0 
     for button in buttons{ 
      button.setTranslatesAutoresizingMaskIntoConstraints(false) 
      contentView.addSubview(button) 
      //button.bounds.size.height = 90 
      button.titleLabel?.numberOfLines = 0 
      contentView.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 5.0)) 
      contentView.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 5.0)) 
      if(index == 0){ 
       contentView.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: preguntaLabel, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 8.0)) 
      } 
      else{ 
       contentView.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: buttons[index-1], attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 8.0)) 
      } 
      if(index == buttons.count-1){ 
       contentView.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: contentView, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: -8.0)) 
      } 
      index++ 
     } 

} 

回答

1

的问题是你映射的第一个按钮与标签的顶部,它无法正确显示实际需要分配第一个按钮顶级等于标签的底部:

if(index == 0) 
{   
    contentView.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: preguntaLabel, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 8.0)) 
} 
+0

感谢您的回答,这项工作但“preguntaLabel”的约束(顶部和尾部)不起作用。只有工作领导的约束。 contentView.addConstraint(NSLayoutConstraint(项目:preguntaLabel,属性:NSLayoutAttribute.Trailing,relatedBy:NSLayoutRelation.Equal,toItem:内容查看,属性:NSLayoutAttribute.Trailing,乘数:1.0,常数:5.0)) contentView.addConstraint(NSLayoutConstraint(项目:preguntaLabel,属性:NSLayoutAttribute.Top,relatedBy:NSLayoutRelation.Equal,toItem:contentView,属性:NSLayoutAttribute.Top,乘数:1.0,常量:15.0)) – corocraft

+0

您在上面的代码给出的代码工作我测试它。我认为他们可能会遇到一些其他问题,如果您使用XOCDE的测试版,请使用YourObjectName。 translatesAutoresizingMaskIntoConstraints = false – Mihawk

+0

嗨,我有xcode 6,4。它不是beta版本,当我运行该项目时,该项目看起来像http://postimg.org/image/4nbx2rt25/。得到你的其他结果?感谢您的帮助。 – corocraft

相关问题