Как я могу применить вертикальное выравнивание к UIBarButtonItem в Swift - PullRequest
1 голос
/ 12 марта 2019

У меня есть UIToolbar , который содержит несколько UIBarButtonItem s, с различными размерами шрифта.Все элементы, кажется, выровнены по определенной базовой линии.В зависимости от высоты панели инструментов, определенный размер шрифта имеет тенденцию появляться в вертикальном центре.Но другие предметы вне центра.Как настроить эти другие элементы так, чтобы они отображались по центру по вертикали?

Примечание. Все элементы имеют текстовый вид, без изображений.Многие другие ответы очень старые и / или предназначены только для изображений.Большинство функций / методов 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 голосов
/ 13 марта 2019

Ну, я был близко. Мне удалось обойти эту проблему, обернув каждую метку в виде и настроив ее как пользовательский вид . Затем я добавил itemText.center.y = self.center.y - verticalOffset. Но метки выровняли их вертикальный центр с основанием панели инструментов - по крайней мере, на моем. Поэтому я установил смещения на половину высоты панели инструментов. Они появляются в вертикальном центре панели инструментов! (Также мне пришлось отрегулировать интервал по горизонтали, добавив фиксированную ширину UIBarButtonItem s.)

После этого у меня были некоторые трудности с доступом к предметам - только на короткое время. Мне удалось изменить метки с помощью (items![abc].customView!.subviews[0] as! UILabel).text = "xyz". Скрыть пунктов было легко: items![abc].customView?.alpha = 0 - установка 1 для Отображение .

...