2015-07-14 2 views
-2

Я пытаюсь запутаться в автоматическом режиме в Swift. Однако у меня есть одна проблема. Я хочу, чтобы мой view1 (красный ящик) имел регулярное разнесенное выравнивание с супервидом (H: | - [view1] - |) ». Это работает для правильного выравнивания, но не слева. Мне нужна левая сторона представления иметь такое же расстояние, как и с правой стороны. вид, кажется, хочет, чтобы выровнять себя по горизонтали с помощью кнопки ниже. кто-нибудь знает, как это исправить, или что я делаю не так? enter image description hereSwift NSLayout неравномерное выравнивание

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.title = "yolo" 
     let frame = UIScreen.mainScreen().bounds 
     var b = UIButton.buttonWithType(UIButtonType.System) as! UIButton 
     b.frame = CGRectMake(frame.minX + 50, frame.minY + 100, frame.width * 0.8, frame.height * 0.2) 
     b.backgroundColor = UIColor.purpleColor() 
     b.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 

     b.layer.cornerRadius = 17 
     b.setTitle("hello", forState: UIControlState.Normal) 
     b.setTranslatesAutoresizingMaskIntoConstraints(false) 


     // Do any additional setup after loading the view, typically from a nib. 


     let view1 = UIView() 
     view1.setTranslatesAutoresizingMaskIntoConstraints(false) 
     view1.backgroundColor = UIColor.redColor() 

     let view2 = UIView() 
     view2.setTranslatesAutoresizingMaskIntoConstraints(false) 
     view2.backgroundColor = UIColor.yellowColor() 


     self.view.addSubview(b) 
     self.view.addSubview(view1) 
     // dictionary for views 
     let viewsDictionary = ["view1":view1,"view2":view2, "b":b] 


     let button_constraint_H:Array = NSLayoutConstraint.constraintsWithVisualFormat("H:[b(>=200)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) 
     let button_constraint_V:Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[b(>=200)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) 

     b.addConstraints(button_constraint_H as [AnyObject]) 
     b.addConstraints(button_constraint_V as [AnyObject]) 

     //view1 
     let view1_constraint_H:Array = NSLayoutConstraint.constraintsWithVisualFormat("H:[view1(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) 
     let view1_constraint_V:Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[view1(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) 

     view1.addConstraints(view1_constraint_H as [AnyObject]) 
     view1.addConstraints(view1_constraint_V as [AnyObject]) 


     let view_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-[view1]-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) 
     let view_constraint_V:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:|-90-[view1]-[b]-0-|", options: NSLayoutFormatOptions.AlignAllLeading, metrics: nil, views: viewsDictionary) 
     let view_constraint_H2:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|[b]|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) 

     view.addConstraints(view_constraint_H2 as [AnyObject]) 
     view.addConstraints(view_constraint_V as [AnyObject]) 
     view.addConstraints(view_constraint_H as [AnyObject]) 

} 
+0

Это действительно ужасный код. Вы не нуждаетесь ни в каких явных объявлениях типа или каких-либо из этих приведений. И измените 'NSLayoutFormatOptions (0)' на 'nil' (или' [] 'при обновлении до Swift 2). – matt

+0

Вы должны получать большое сообщение об ошибке в консоли при запуске этого кода, потому что ваши ограничения не имеют никакого смысла вместе. Ты? – matt

+0

Нет никакой ошибки или предупреждений. Просто картинка выше – applejuiceteaching

ответ

1

проблема заключается в том, что ваши ограничения не имеет смысла, вы говорите, это:.

"H:[view1(50)]" 
"H:|-[view1]-|" 

Итак, с одной стороны, вы хотите view1 быть приведены в соответствие с полями его надтаблицы (Тхи s - то, что означает -), но с другой стороны вы хотите, чтобы view1 был ровно в 50 точках (это то, что означает (50)). У вас не может быть обоих!

+0

Я знаю, что вы пытаетесь помочь мне и поблагодарить вас. Однако, когда я комментирую «H: | - [view1] - |», проблема сохраняется. – applejuiceteaching

+0

Нет, проблема не сохраняется. Что происходит, так это то, что у вас есть другие проблемы. Ваши ограничения _still_ не имеют смысла. Например, с одной стороны, вы говорите, что кнопка 'b' должна быть выровнена с помощью' view1', но, с другой стороны, вы говорите, что она должна иметь передний край на краю супервизора. Попытайтесь понять: вы говорите много ерунды, что не имеет смысла. Вам нужно точно определить, что вы хотите от этого макета, и просить об этом, не меньше и не больше. – matt

+0

получил, спасибо! – applejuiceteaching

Смежные вопросы