2016-08-12 2 views
0

Я пытаюсь создать кнопку программно и хочу, чтобы кнопка немного выше снизу и пространства справа и слева. На данный момент кнопка отображения, как этотКак установить кнопку горизонтально в центре

enter image description here

здесь код

func showbutton(){ 
     let button = UIButton(type: .System) // let preferred over var here 
     button.frame = CGRectMake(8, 550, 415, 50) 

     button.backgroundColor = UIColor.greenColor() 
     button.setTitle("Add new request", forState: UIControlState.Normal) 
     //button.addTarget(self, action: "Action:", forControlEvents: UIControlEvents.TouchUpInside) 
     self.view.addSubview(button) 
     // Set background color to see if label is centered 

     view.addSubview(button) 

    } 
+0

Используйте AutoLayout ограничения. Я использую [SnapKit] (https://github.com/SnapKit/SnapKit), чтобы ограничения на основе кода не сосать. – brandonscript

+0

ну, я должен показать и скрыть кнопку на основе некоторых условий, поэтому мне нужно сделать это программно – hellosheikh

+0

Да, поэтому я упомянул SnapKit - программные ограничения, но вместо того, чтобы писать неприятный, сложный синтаксис ограничений, вы можете это сделать используя их логический, основанный на блоках синтаксис. – brandonscript

ответ

0

Это поместит пространство 8 точек на левых и правых, сохраняя при этом все другие измерения того же

let screenSize: CGRect = UIScreen.mainScreen().bounds 
let screenWidth = screenSize.width 

button.frame = CGRectMake(8, 550, screenSize.width-16, 50) 
+0

Это действительно работает, но будущее iOS dev определенно лежит в AutoLayout. Я настоятельно рекомендую не настраивать рамки в 2016 году. – brandonscript

+1

@brandonscript Да, очевидно, используйте AutoLayout как можно больше, я просто отвечаю на вопрос самым простым способом, все хорошо – Loxx

+0

... Хороший материал;) – brandonscript

0

Вы можете настроить кадр баттона, регулируя число, но вы потеряете autolayout функции и когда вращается экран ваша кнопка не будет выглядеть правильно.

Вместо этого добавьте ограничения, как и в раскадровке, используя класс NSLayoutContraint.

0

Как я уже упоминал в своем комментарии, мой идти к для программно с помощью AutoLayout (и вы должен использоваться AutoLayout) - SnapKit.

func showbutton(){ 
    let button = UIButton(type: .System) // let preferred over var here 
    button.frame = CGRectMake(8, 550, 415, 50) 

    button.backgroundColor = UIColor.greenColor() 
    button.setTitle("Add new request", forState: UIControlState.Normal) 
    //button.addTarget(self, action: "Action:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.view.addSubview(button) 
    // Set background color to see if label is centered 

    view.addSubview(button) 
    // create the constraints 
    button.snp_makeConstraints { (make) -> Void in 
     make.centerY.equalTo(view) 
    } 
} 
0

Раствор 1:

С помощью UIView кадра в качестве опорного

import UIKit 
    class ViewController: UIViewController { 
     override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib. 

      let rect : CGRect = self.view.frame 
      let width = rect.width 
      let height = rect.height 

      let buttonHeight : CGFloat = 50.0 
      let leftMargin : CGFloat = 10.0 
      let bottomMargin : CGFloat = 10.0 

      let button : UIButton = UIButton() 
      button.frame = CGRectMake(leftMargin, height-buttonHeight-bottomMargin, width - 2*leftMargin , buttonHeight) 
      button.backgroundColor = UIColor.greenColor() 
      button.setTitle("Add new request", forState: UIControlState.Normal) 

      self.view.addSubview(button) 
     } 
    } 

Раствор 2:

При использовании AutoLayout ограничения:

import UIKit 
    class ViewController: UIViewController { 
     override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib. 
      let requiredButton : UIButton = { 
       let button = UIButton() 
       button.backgroundColor = UIColor.greenColor() 
       button.setTitle("Add new request", forState: UIControlState.Normal) 
       return button 
      }() 

      // dont worry about frame right now 

      self.view.addSubview(requiredButton) 

      // set frame using autolayout 

      self.view.addContraintsWithFormat("H:|-10-[v0]-10-|", views: requiredButton) 
      self.view.addContraintsWithFormat("V:[v0(50)]-10-|", views: requiredButton) 
     [enter image description here][1] 
     } 

     override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated. 
     } 


    } 


    extension UIView{ 
     func addContraintsWithFormat(format: String, views: UIView...){ 
      var viewDictionary = [String: UIView]() 
      for (index,view) in views.enumerate(){ 
       let key = "v\(index)" 
       viewDictionary[key] = view 
       view.translatesAutoresizingMaskIntoConstraints = false 
      } 

      addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(format, options: NSLayoutFormatOptions(), metrics: nil, views: viewDictionary)) 
     } 
    } 

выход одинакова в обоих случаях