如何将边框和圆角半径应用于 UIBarButtonItem?

How to apply borders and corner radius to UIBarButtonItem?

我以编程方式创建了一个工具栏,并在其中添加了 UIBarButtonItem。

这是目前的样子:

我希望按钮有边框和角半径(弯曲的角)。 将如何实施?

UIBarButtonItem 实现代码:

let okBarBtn = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: "donePressed:")

不幸的是,没有内置的自动方法来执行此操作。您有两个选择:

  • 您可以将其设为带有自定义视图的条形按钮项目,将该视图设为 UIButton,然后对该 UIButton 执行常规操作(您可以这样做,因为它是一个视图),方法是层的方式(给它一个边界和角半径)。

  • 您可以(在代码中)绘制一个带有弯曲边框的背景图像,并将其用作栏按钮项目的图像。

如果可以找到与UIBarButtonItem关联的UIView,可以修改UIView.layer。但是,找到 UIView 并不容易。我使用了 Figure out UIBarButtonItem frame in window? 中的技术。从 navigationController.navigationBar 开始,它本身就是一个 UIView,我遍历了子视图,其中一个将是我想要的按钮。哪一个?选择你自己的标准!这是我的代码:

func recurseViews(view:UIView) {
    print("recurseViews: \(view)") // helpful for sorting out which view is which
    if view.frame.origin.x > 700 { // find _my_ button
        view.layer.cornerRadius = 5
        view.layer.borderColor = UIColor.redColor().CGColor
        view.layer.borderWidth = 2
    }
    for v in view.subviews { recurseViews(v) }
}

然后在 viewDidAppear(或类似)

recurseViews((navigationController?.navigationBar)!)

这有点乱七八糟,但可以完成工作:

我用故事板来做。只需在 UiBarButtonItem 中添加 UIButton。喜欢这里

然后为 UIButton 添加边框