约束水平居中和放大在superview中垂直方向阻止我改变框架

时间:2015-07-06 02:16:49

标签: ios swift uibutton autolayout

我在UIButton内有一个UIView,有两个约束。这两个约束都在Interface Builder中设置,以便UIButton在其superview中垂直和水平居中。

我想在UIButton添加边框并将其四舍五入。跟随answer on SO后,我可以将按钮部分舍入。

Simi-rounded button

出于某种原因,按钮不是真正的圆形。我认为这是因为我的身高和宽度不相等。每次我将按钮的宽度/高度设置为相等时,autolayout约束会将其重置为40x34。

我使用以下代码创建圆角按钮。

self.startButton.clipsToBounds = true
self.startButton.layer.cornerRadius = self.startButton.frame.height / 2
self.startButton.layer.borderWidth = 1
self.startButton.layer.borderColor = self.view.tintColor.CGColor
self.startButton.layer.shadowRadius = 6.0
self.startButton.layer.shadowColor = UIColor.blackColor().CGColor
self.startButton.layer.shadowOffset = CGSizeMake(0.0, 3.0)
self.startButton.layer.shadowOpacity = 0.65

为什么我的按钮垂直和水平居中会阻止我改变它的大小?我不明白为什么我不能设置按钮的大小,并根据我分配给它的大小值让约束重新居中。

修改

我已将代码移至viewDidLayoutSubviews,然后修改约束,以便将高度和宽度都限制为40x40。

override func viewDidLayoutSubviews() {
    self.startButton.clipsToBounds = true
    self.startButton.titleLabel?.text = "Start"
    self.startButton.layer.cornerRadius = self.startButton.frame.height / 2
    self.startButton.layer.borderWidth = 1
    self.startButton.layer.borderColor = self.view.tintColor.CGColor
    self.startButton.layer.shadowRadius = 6.0
    self.startButton.layer.shadowColor = UIColor.blackColor().CGColor
    self.startButton.layer.shadowOffset = CGSizeMake(0.0, 3.0)
    self.startButton.layer.shadowOpacity = 0.65
}

这部分解决了我的问题;但并不完全。如果我没有为titleLabel分配值,则该按钮是一个正确的圆形按钮。

Round button

但是,如果我为titleLabel指定一个值,该按钮将变为圆角矩形而不是圆形。

Rounded Rect

但是文本没有出现在按钮中,这让我很困惑。我需要让按钮成为一个圆圈,缩放以适应它所拥有的内容。我的按钮类型设置为Custom。我不知道这是否对此有任何影响。

编辑2

在做了一些测试之后,我发现我正在为按钮设置边缘插入。一旦我删除了以下内容:

self.startButton.contentEdgeInsets = UIEdgeInsets(top: 25, left: 25, bottom: 25, right: 25)

我用@Leo的回答得到了预期的效果。

Rounded arrow button

1 个答案:

答案 0 :(得分:1)

你需要添加关于身高和身高的约束。按钮的宽度。

固定宽度和宽度高度或方位无线电都可以。

如果使用宽高比无线电,请在viewDidLayoutSubviews

中设置角半径