Как установить Inset для элементов панели инструментов в глобальном масштабе? - PullRequest
0 голосов
/ 26 мая 2018

Я пробовал это из AppDelegate, но tabBarController в этот момент равен нулю, и он не будет работать.

self.window?.rootViewController?.tabBarController?.toolbarItems![0].imageInsets.top = 5.0
self.window?.rootViewController?.tabBarController?.toolbarItems![1].imageInsets.top = 5.0

Я мог бы сделать это для первого элемента панели вкладок, только вставив этот фрагмент кодав первом контроллере представления:

override func viewDidLoad() {
    super.viewDidLoad()
    self.tabBarItem.imageInsets.top = 5.0
}

Но я не могу применить это ко второму контроллеру представления, так как он не загружается, пока пользователь не нажмет на элемент панели вкладок в первую очередь.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Таким образом, вы можете создать свой собственный класс UITabBarController:

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        if let tabBarItems = self.tabBar.items {
            for item in tabBarItems {
                item.imageInsets.top = 5
            }
        }
    }
}

Затем в раскадровке установите этот класс как пользовательский для вашего UITabBarController

0 голосов
/ 26 мая 2018

Проблема в том, что это слишком поздно:

override func viewDidLoad() {
    super.viewDidLoad()
    self.tabBarItem.imageInsets.top = 5.0
}

Место для подготовки элемента панели вкладок контроллера представления находится в его инициализаторе.Вам нужно переопределить init(coder:) (при условии, что этот экземпляр контроллера представления происходит из раскадровки):

required init?(coder aDecoder: NSCoder) {
    super.init(coder:aDecoder)
    self.tabBarItem.imageInsets.top = 5.0
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...