2017-03-06 72 views
0

我有一個UIScrollView(IBOutlet)成功約束內一個故事板。然後我以編程方式創建UIButton,並將它們作爲UIScrollView的子視圖。我如何以編程方式設置這些UIButton約束,以便它們的高度和大小與他們的超級視圖相符?UIButton作爲子視圖編程約束

class ViewController: UIViewController { 

@IBOutlet weak var aScrollView: UIScrollView! 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    var xCoord: CGFloat = 5 
    let yCoord: CGFloat = 5 
    let buttonWidth:CGFloat = 100 
    let buttonHeight: CGFloat = 100 

    let gapBetweenButtons: CGFloat = 10 


    var itemCount = 0 

    // MARK: - filter buttons 
    for i in 0..<6 { 

     itemCount = i 

     let aButton = UIButton(type: .custom) 
     aButton.frame = CGRect(x: xCoord, y: yCoord, width: buttonWidth, height: buttonHeight) 
     aButton.backgroundColor = UIColor.blue 
     aButton.layer.cornerRadius = aButton.frame.size.width/2 
     aButton.clipsToBounds = true 

     xCoord += buttonWidth + gapBetweenButtons 

     aScrollView.addSubview(aButton) 
    } 
} 
+1

@mclovin首先viewDidLoad不是用於放下所有的代碼。保持你的代碼乾淨。:) –

+0

@matt是沒有約束的。你可以看到我現在硬編碼了uibutton的大小。因此這個問題。我需要這些uibutton根據aScrollView調整大小。我通過故事板成功設置了一個ScrollView約束,現在通過代碼詢問幫助爲aButton設置約束。很抱歉混淆。 – mclovin

+0

爲了進一步添加到@matt評論...「我需要那些解除按鈕**相應地調整大小** aScrollView」... * *表示什麼?有時候一張圖片勝過千言萬語...... – dfd

回答

0

試試這個 -

這只是關於如何編程方式添加約束的想法。

更多的瞭解,您可以點擊以下鏈接經歷 - https://developer.apple.com/reference/appkit/nslayoutanchor

let myButton = UIButton() 
self.aScrollView.addSubview(myButton) 

self.view.translatesAutoresizingMaskIntoConstraints = false 
let margins = self.view.layoutMarginsGuide 
myButton.leadingAnchor.constraint(equalTo: forView. aScrollView.leadingAnchor, constant: 5).active = true 
myButton.topAnchor.constraint(equalTo: forView. aScrollView.topAnchor, constant: 5).active = true 
myButton.heightAnchor.constraintEqualToConstant(100.0).active = true 
myButton.widthAnchor.constraintEqualToConstant(100.0).active = true 
+0

什麼是forView?不管怎樣,謝謝! – mclovin

+0

forView - 要在其上添加按鈕意味着超級按鈕的按鈕。 –

0

你的代碼更改爲:

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     var xCoord: CGFloat = 5 
     let yCoord: CGFloat = 5 

     let gapBetweenButtons: CGFloat = 10 


     let buttonCount = 6 
     let buttonWidth = (aScrollView.frame.width - CGFloat(buttonCount - 1) * gapBetweenButtons - xCoord - xCoord)/CGFloat(buttonCount) // - (2 * xCoord) = - (margin left + margin right). 
     let buttonHeight = buttonWidth 

     var itemCount = 0 

     // MARK: - filter buttons 
     for i in 0..<buttonCount { 

      itemCount = i 

      let aButton = UIButton(type: .custom) 
      aButton.frame = CGRect(x: xCoord, y: yCoord, width: buttonWidth, height: buttonHeight) 
      aButton.backgroundColor = UIColor.blue 
      aButton.layer.cornerRadius = aButton.frame.size.width/2 
      aButton.clipsToBounds = true 

      xCoord += buttonWidth + gapBetweenButtons 

      aScrollView.addSubview(aButton) 
     } 
    } 
+0

不成功。 iphone se - http://imgur.com/a/G6BV3 iphone 7 - http://imgur.com/a/SvlHk 但謝謝! – mclovin

+0

對不起。我錯了。再次檢查我的答案。 – javimuu

+0

@mclovin我已經在模擬器中測試過:iphone 5:http://imgur.com/a/hdrPW iphone 7:http://imgur.com/a/8Ptcu – javimuu