如何在Swift中将垂直对齐方式应用于UIBarButtonItem

时间:2019-03-12 19:33:57

标签: swift vertical-alignment uibarbuttonitem uitoolbar

我有一个 UIToolbar ,其中包含几个不同字体大小的 UIBarButtonItem 。所有项目似乎都与某个基准保持一致。根据工具栏的高度,特定的字体大小倾向于出现在垂直中心。但是其他项目偏离中心。如何设置这些其他项目以显示在垂直中心?

注意:所有项目均为文本-没有图像。 许多其他响应非常旧和/或仅用于图像。大多数obj.c函数/方法都可以轻松转换为Swift。

我使用以下方式放置物品:

func addLabel(_ text: String, textcolor: UIColor?, font: UIFont?, items: inout [UIBarButtonItem], verticalOffset: CGFloat) -> Int {
    let item = UIBarButtonItem(title: text, style: UIBarButtonItem.Style.plain, target: nil, action: nil)
    if font != nil {
        item.setTitleTextAttributes([NSAttributedString.Key.font : font!], for: UIControl.State.normal)
    }
    if textcolor != nil {
        item.tintColor = textcolor!
    }
    items.append(item)
    return items.count-1
}

我已经尝试了(这些方法行不通):

  • setTitleTextAttributes 与.baselineOffset
  • setTitlePositionAdjustment
  • setBackgroundVerticalPositionAdjustment
  • let item = UIBarButtonItem(customView: itemView),其中itemView是 UIView

也许是我在视图中包装UILabel的最后一个项目,然后将其设置为customView可能有效,但对我来说它在各处都显示了。我尝试将主要方法的内容替换为:

    let itemView = UIView(frame: CGRect(x: 0, y: verticalOffset, width: 0, height: 0))
    let itemText = UILabel()
    itemText.text = text
    itemText.textColor = textcolor
    itemText.font = font
    itemText.sizeToFit()
    itemView.translatesAutoresizingMaskIntoConstraints = false
    let item = UIBarButtonItem(customView: itemView)
    itemView.addSubview(itemText)

如何抵消工具栏上的某些项目?

1 个答案:

答案 0 :(得分:0)

我很亲近。 我可以通过将每个标签包装在视图中并将其设置为自定义视图来解决此问题。然后,我添加了itemText.center.y = self.center.y - verticalOffset。但是标签的垂直中心与工具栏的底部对齐-至少在我的位置上对齐。因此,我将偏移量设置为工具栏高度的一半。它们出现在工具栏的垂直中心! (另外,我还必须通过添加一些固定宽度的UIBarButtonItem来调整一些水平间距。)

此后,我在访问项目时遇到了一些困难-仅一小段时间。我设法使用(items![abc].customView!.subviews[0] as! UILabel).text = "xyz"来更改标签。 隐藏项目非常简单:items![abc].customView?.alpha = 0-为显示设置1。