2017-03-06 77 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

相关问题