在 UIBarButtonItem 中添加边框

Posted

技术标签:

【中文标题】在 UIBarButtonItem 中添加边框【英文标题】:Add border in UIBarButtonItem 【发布时间】:2013-09-26 16:00:39 【问题描述】:

在我的应用程序中,我在界面构建器中设计了一个视图。 这个视图有一个工具栏,里面有一些 UIBarButtonItem。

我的按钮可以是自定义图像,也可以是共享、添加等默认按钮... 现在有了 ios7,按钮不再有边框了。所以我想补充一些。

这是我想要做的:在我的屏幕截图上添加边框,如白线。 我尝试的是在工具栏上添加一个 UIButton 。在我的示例中,我设置了后退按钮大小 (12x44)。我将此按钮添加为视图控制器的 IBOutlet 属性,并尝试为其绘制边框:

CALayer *cancelBorder = [CALayer layer];
[cancelBorder setFrame:CGRectMake(12, 0, 1, 44)];
[backBorder setBackgroundColor:[[UIColor whiteColor] CGColor]];
[backButton.layer addSublayer:cancelBorder];

但它不起作用。谁有解决办法?

【问题讨论】:

您的 cancelBorder 可能超出了 backButton 的范围。您说您的 backButton 的宽度为 12,而您的 cancelBorder 的 x 偏移量为 12。因此 cancelBorder 开始于您的 backButton 的边界之外,因此将不可见(假设按钮具有 clipToBounds = YES,我认为它有)。也许尝试使用 8 的偏移量或其他东西,看看它是否可见。对于处于边缘,它必须是 11 的偏移量。 【参考方案1】:

以编程方式将 UIBarButtonItem 添加到工具栏可能会解决您的问题。

首先,创建带有图像、边框等的自定义按钮。正如 HereTrix 所说,您可以为该按钮添加边框。

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(10, 0, 30, 30);
button.layer.borderColor = [UIColor blueColor].CGColor;
button.layer.borderWidth = 1.0f;
/* any other button customization */

然后,使用该自定义按钮初始化 UIBarButtonItem 并将此项添加到您的工具栏。

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.toolBar.items = @[backButton];

【讨论】:

【参考方案2】:

Swift 3:下面是我对按钮自定义和事件处理的完整实现。

override func viewDidLoad() 
    super.viewDidLoad()

    let button = UIButton.init(type: .custom)
    button.setTitle("Tester", for: .normal)
    button.setTitleColor(.darkGray, for: .normal)
    button.layer.borderWidth = 1
    button.layer.cornerRadius = 5
    button.layer.borderColor = UIColor.darkGray.cgColor
    button.addTarget(self, action: #selector(self.handleButton), for: .touchUpInside)

    self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)


override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)

    if let button = self.navigationItem.rightBarButtonItem?.customView 
        button.frame = CGRect(x:0, y:0, width:80, height:34)
    


func handleButton( sender : UIButton ) 
    // It would be nice is isEnabled worked...
    sender.alpha = sender.alpha == 1.0 ? 0.5 : 1.0

希望对你有帮助

【讨论】:

以上是关于在 UIBarButtonItem 中添加边框的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Xcode UI 测试中点击 UIBarButtonItem

UIBarButtonItem 带有图像和文本以及边框?

带有图像和文本的 UIBarButtonItem

如何为栏按钮添加徽章?

如何在 UI 按钮/文本标签中的字母周围制作边框?

带有 CustomView 和边框的 UIBarButton