具有自定义图层的UIButton的子类不会完全填充相邻视图的空间

时间:2015-10-27 20:36:24

标签: ios swift uibutton autolayout

我试图创建一个带图标的方形按钮,背景是透明的。当按钮突出显示时,背景变为白色。一切正常,但后来我注意到突出显示的按钮右侧白色边框不如边框的其他部分那么清晰。经过一些研究后,我意识到只有当右侧视图设置为“将中心X对齐:超级视图”时才会发生这种情况。这是我做的一个例子:

enter image description here

您看到的白色字段是我制作的矩形按钮(下面的代码)。请注意,按钮和绿色UIView之间的小间隙可以看到一些红色背景颜色。绿色视图设置为“将中心X对齐:超级视图”,按钮的尾随空格0为绿色视图。蓝色UIView下没有遇到这种奇怪的差距。

现在看看这张图片:

enter image description here

这是完全相同的设置,但现在绿色UIView具有“尾随空间:Superview = 140”而不是X居中。现在差距消失了!为什么会这样?

以下是绘制白色按钮的代码。

import UIKit

@IBDesignable
class SquareButton: UIButton {

var iconLayer: CAShapeLayer!

func setup() {
    if iconLayer == nil {
        iconLayer = CAShapeLayer()

        // Create a custom white background color
        let rect = CGRectMake(0.0, 0.0, self.bounds.width, self.bounds.height)
        UIGraphicsBeginImageContext(self.bounds.size)
        let context = UIGraphicsGetCurrentContext()
        CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
        CGContextFillRect(context, rect)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext();

        // Set forState .Normal just for this example
        self.setBackgroundImage(image, forState: .Normal)
    }
}


override func layoutSubviews() {
    super.layoutSubviews()
    setup()
}

override init(frame: CGRect) {
    super.init(frame: frame)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}
}

任何帮助将不胜感激! :d

1 个答案:

答案 0 :(得分:0)

我最终解决了这个问题,而不是设置白色背景图像,我创建了一个填充的CAShapeLayer并将其添加为按钮的子图层。这有点原因。