Как центрировать изображение символов SF по вертикали в UITabBarItem?

Я использую изображения SF Symbols в качестве изображений вкладок в моем приложении для iOS, назначая их следующим образом:

self.tabBarItem.image = UIImage(systemName: "ellipsis")  

В результате все изображения выравниваются по верхнему краю, но я бы хотел, чтобы они были центрированы по вертикали.

Что мне для этого нужно сделать?

3 ответа

Решение

По-видимому, символы SF по умолчанию отображаются с системным размером шрифта. Таким образом, если вы добавите смещение базовой линии в половину этого размера к символу многоточия, вы сможете почти идеально центрировать его по вертикали таким образом.

Это почти идеально только потому, что у символа многоточия есть собственная высота, которая не учитывается этим решением, даже если она небольшая.

self.tabBarItem.image = UIImage(systemName: "ellipsis")!.withBaselineOffset(fromBottom: UIFont.systemFontSize / 2)

Лучшее решение, которое сделает вашу кнопку идентичной tabBarSystemItem: .more, но с возможностью удаления заголовка и применения конфигурации, следующее:

      self.tabBarItem.image = UIImage(systemName: "ellipsis", withConfiguration: 
UIImage.SymbolConfiguration(weight: .black))!.imageWithoutBaseline()

Вы должны установить вставки изображений на UITabBarItem чтобы сместить значки вниз на 6 или 7 пикселей (в зависимости от размера значка).

В коде:

Я сделал это, создав подкласс UITabBarController и добавив этот код в конец моего viewDidLoad метод:

tabBar.items?.forEach({
  $0.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
})

(Вы также можете сделать это в своих классах ViewController, если именно там вы настраиваете каждый из их элементов панели вкладок.)

В раскадровках:

Вы также можете сделать это с помощью раскадровки, выбрав свой TabBarItem в раскадровке и настроив вставки на информационной панели:

Другие вопросы по тегам