我正在尝试为我的按钮添加顶部和右侧边框,但不是底部或左侧。我查了一下,并通过添加看起来像边框的视图找到了这样做的建议。
//Add borders
let topBorder = UIView(frame: CGRectMake(0, 0, editorBox.frame.size.width/3, 1))
let rightBorder = UIView(frame: CGRectMake(cancel.frame.size.width, 0, 1, cancel.frame.size.height))
topBorder.backgroundColor = UIColor(red: 220/255.0, green: 220/255.0, blue: 220/255.0, alpha: 1.0)
rightBorder.backgroundColor = UIColor(red: 220/255.0, green: 220/255.0, blue: 220/255.0, alpha: 1.0)
cancel.addSubview(topBorder)
cancel.addSubview(rightBorder)
但最终的模拟器测试如下:
然而,按钮绝对不是那么大,因为你无法点击它的最右侧。自动布局约束确认按钮不是那么大。
我只是希望每个按钮都有一个边框,它的实际宽度是1/3,如约束中所设置的那样。谁能告诉我发生了什么以及如何解决它?
答案 0 :(得分:1)
我认为这是一个自动布局问题 - 您的按钮是在布局更改其宽度之前生成的。另一方面,您的边框视图不会更改其宽度,因为它们超出了约束层次结构。
对于这个简单的事情,我认为UIViews有点太多了。我会在问题按钮上添加一些CALayers。
这是一个与CALayer解决方案直接相关的堆栈溢出问题: CALayer: add a border only at one side
答案 1 :(得分:0)
事实证明,另一个答案本身并没有解决我的边界问题。这是我正在使用的代码,基于@tbondwilkinson答案:
//Add borders
let borderColor = UIColor(red: 200/255.0, green: 200/255.0, blue: 200/255.0, alpha: 1.0).CGColor
func formatTopBorder (buttonToFormat: UIButton,borderToFormat: CALayer) {
buttonToFormat.clipsToBounds = true
borderToFormat.borderColor = borderColor
borderToFormat.borderWidth = 2
borderToFormat.frame = CGRectMake(0, 0, CGRectGetWidth(cancel.frame), 2)
}
let topBorder: CALayer = CALayer()
let topBorder2: CALayer = CALayer()
let topBorder3: CALayer = CALayer()
let rightBorder: CALayer = CALayer()
let leftBorder: CALayer = CALayer()
formatTopBorder(cancel, borderToFormat: topBorder)
formatTopBorder(action, borderToFormat: topBorder2)
formatTopBorder(addSave, borderToFormat: topBorder3)
rightBorder.borderColor = borderColor
rightBorder.borderWidth = 2
rightBorder.frame = CGRectMake(CGRectGetWidth(cancel.frame)-2, 0, 2, CGRectGetHeight(cancel.frame))
leftBorder.borderColor = borderColor
leftBorder.borderWidth = 1
leftBorder.frame = CGRectMake(0, 0, 2, CGRectGetHeight(cancel.frame))
cancel.layer.addSublayer(topBorder)
cancel.layer.addSublayer(rightBorder)
action.layer.addSublayer(topBorder2)
addSave.layer.addSublayer(topBorder3)
addSave.layer.addSublayer(leftBorder)
但是如果放在viewDidLoad中,它就不能完美地工作。顶部边框起作用,左边界也起作用。但是,它仍然过早地获得UIButton宽度,导致右边界不起作用:
rightBorder.frame = CGRectMake(CGRectGetWidth(cancel.frame)-2, 0, 2, CGRectGetHeight(cancel.frame))
CGRectGetWidth(cancel.frame)-2获得正确的右边缘并为边框提供空间,但它在按钮大小调整之前获得宽度。
解决方案:
使用该方法,然后将该代码放在viewDidAppear中。不幸的是,在您的视图出现后,边框会出现一小段时间,但所有边框都是正确的。
如果有人可以发布适用于右边缘边界的代码,该代码在viewDidLoad中运行,请发布它并将其标记为正确。