(Swift)以编程方式将UIButton约束到角落

时间:2016-07-19 02:28:28

标签: ios swift uibutton

我有一个圆形按钮的图像代码如下:

let settingsButton = UIButton(type: .Custom)

settingsButton.frame = CGRectMake(160, 100, 50, 50)
settingsButton.layer.cornerRadius = 0.5 * settingsButton.bounds.size.width
settingsButton.setImage(UIImage(named:"settingsButton.png"), forState: .Normal)
settingsButton.clipsToBounds = true

view.addSubview(settingsButton)

我想将它限制在视图控制器的左上角,但由于我以编程方式创建了此按钮,因此我无法在故事板中看到它,因此无法手动移动和约束它。有没有办法能够在我的故事板的视图控制器中看到这个以编程方式创建的按钮?如果没有,我如何以编程方式将我创建的这个按钮约束到我的视图控制器的左上角?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

最简单的方法是,在代码中创建按钮,就是使用按钮的自动调整遮罩。首先,设置按钮的autoresizingMask,使其位于超视图的右上角。然后设置按钮的settingsButton.frame = CGRect(x: view.bounds.maxX - 50, y: 0, width: 50, height: 50) settingsButton.autoresizingMask = [.flexibleLeftMargin, .flexibleBottomMargin] view.addSubview(settingsButton) 以仅允许超视图左边和底边的距离变化:

diff

我的代码采用Swift 3语法,但将其转换为Swift 2应该是微不足道的。

请记住,自动调整大小的掩码在自动布局下工作正常。 Apple的许多标准类仍在内部使用自动调整掩码。 Xcode 8增加了在故事板或xib中混合约束和自动调整掩码的功能,所以很明显Apple认为你应该在适合时使用自动调整。

答案 1 :(得分:0)

如果我使用约束将约束解释为,则可以使用布局锚点。这里的问题是:

  1. 始终在您的视图上设置translatesAutoresizingMaskIntoConstraints = false
  2. 在布局主播上设置.active = true
  3. 仅适用于iOS> = 9.0(如果您需要支持早期版本的iOS,请使用普通NSlayoutConstraint)。
  4. 示例代码:

    let settingsButton = UIButton(type: .Custom)
    view.addSubview(settingsButton)
    settingsButton.backgroundColor = UIColor.redColor()
    settingsButton.translatesAutoresizingMaskIntoConstraints = false
    settingsButton.widthAnchor.constraintEqualToConstant(50).active = true
    settingsButton.heightAnchor.constraintEqualToConstant(50).active = true
    
    settingsButton.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 10).active = true
    settingsButton.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -10).active = true
    
    settingsButton.setNeedsLayout()
    settingsButton.layoutIfNeeded()
    settingsButton.layer.cornerRadius = 0.5 * settingsButton.bounds.size.width
    settingsButton.setImage(UIImage(named:"settingsButton.png"), forState: .Normal)
    settingsButton.clipsToBounds = true
    

    注意使用约束优于设置框架,因为约束适应父视图大小的变化(例如设备旋转到横向模式)。

答案 2 :(得分:0)

您可以使用此:

let settingsButton = UIButton()
settingsButton.translatesAutoresizingMaskIntoConstraints = false
settingsButton.trailingAnchor.constraint(equalTo: view.leadingAnchor,constant: 160).isActive = true
settingsButton.bottomAnchor.constraint(equalTo: view.topAnchor,constant: 100).isActive = true
settingsButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
settingsButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
settingsButton.widthAnchor.constraint(equalToConstant: 50).isActive = true
settingsButton.layer.cornerRadius = 0.5 * settingsButton.bounds.size.width
settingsButton.clipsToBounds = true

view.addSubview(settingsButton)