为视图添加边框,在iPad上无法正常工作

4

我根据这个答案创建了一个扩展:如何在UIView的顶部添加边框

extension CALayer {

    func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
        //https://dev59.com/Y2Qm5IYBdhLWcg3wxBRg
        let border = CALayer()

        switch edge {
        case UIRectEdge.Top:
            border.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), thickness)
            break
        case UIRectEdge.Bottom:
            border.frame = CGRectMake(0, CGRectGetHeight(self.frame) - thickness, CGRectGetWidth(self.frame), thickness)
            break
        case UIRectEdge.Left:
            border.frame = CGRectMake(0, 0, thickness, CGRectGetHeight(self.frame))
            break
        case UIRectEdge.Right:
            border.frame = CGRectMake(CGRectGetWidth(self.frame) - thickness, 0, thickness, CGRectGetHeight(self.frame))
            break
        default:
            break
        }

        border.backgroundColor = color.CGColor;

        self.addSublayer(border)
    }
}

但是在iPad上,我只看到了70%的边框宽度:

enter image description here

我尝试将frame更改为bounds,但它也没有起作用。


代码在我看来没问题,1- 你是在模拟器中放大还是缩小?这可能会压缩一些像素,2- 你是否有另一个对象可以覆盖右侧的白色区域? - DeyaEldeen
我也在真实设备上尝试了,结果一样。但在 iPhone 上可以。 - Arti
1个回答

2

在添加边框后,视图框架被调整大小。您是在viewDidLoad()方法中添加边框的吗?尝试在viewDidAppear()方法中添加边框:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    yourView.layer.addBorder(UIRectEdge.Top, color: UIColor.redColor(), thickness: 0.5)
}

将添加层移动自
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {}

to

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.layer.addBorder(UIRectEdge.Top, color: UIColor.redColor(), thickness: 0.5)
}

我也在表格单元格中使用这个方法。 - Arti
你是在cellForRow方法中使用它吗?检查那个单元格的frame。在控制台中打印下一个值:print("cell width = \ (cell.frame.size.width)") 和 print("view width = \ (view.frame.size.width)") 我认为你的视图实际上比单元格框架更宽。最好将该方法从cellForRow移动到UITableViewDelegate的willDisplayCell方法中。 - Sasha Kozachuk
@Arti,你能否请接受我的回答作为最终答案,这样我就可以获得更多的声望。我是新来的,想要能够评论,谢谢! - Sasha Kozachuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接