Как остановить изменение ширины фона изображения элемента панели при нажатии? - PullRequest
0 голосов
/ 02 декабря 2018

Когда я нажимаю на изображения элементов панели вкладок, ширина их фона (или чего бы то ни было) увеличивается.Как вы можете видеть на скриншоте ниже, размер изображения фиксирован, но ширина фона увеличивается после того, как я нажимаю на любой из них.

Кто-нибудь знает, как это предотвратить?

Ниже приведен код вМой UITabBarController View

    for tabBarItem in (self.tabBar.items)!{
        tabBarItem.title = ""
        tabBarItem.imageInsets = UIEdgeInsetsMake(6.0, 0.0, -6.0, 0.0)

        let viewTabBar = tabBarItem.value(forKey: "view") as? UIView
        let imgView = viewTabBar?.subviews[0] as? UIImageView

        imgView?.frame.size.height = 32
        imgView?.frame.size.width = 32

        imgView?.clipsToBounds = true
        imgView?.backgroundColor = .red
    }

Tabbar item images before and after click

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

По логическому анализу это должно было быть легко определить увы!ни я, ни кто-либо другой не могли этого понять.

Был код, который изменял размер изображения выбранного элемента панели вкладок.Я удалил этот код, и он работает нормально.Как я уже писал, мой комментарий выше, если размеры изображения установлены правильно, значок всегда располагается правильно и нет необходимости перемещать значки.

0 голосов
/ 02 декабря 2018

Попробуйте добавить этот код внутри viewDidLayoutSubviews(), затем вместо установки размера и ширины imageView просто добавьте изображение как изображение в tabBarItem.

Я не знаю, как называется вкладкаизображения, которые вы использовали, но для примера давайте назовем первое изображение внутри xcassests homeIcon, второе изображение middleIcon и последнее изображение settingsIcon

Это способ, которым я бы создал подкласс моего TabBarController, используя эти изображенияи другой код для центрирования изображения без заголовка изображения внутри viewDidLayoutSubviews().

class MyTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let homeVC = HomeController()
        let navVCHome = UINavigationController(rootViewController: homeVC)
        navVCHome.tabBarItem = UITabBarItem(title: nil, image: UIImage(named: "homeIcon"), tag: 0)

        let middleVC = MiddleController()
        let navVCMiddle = UINavigationController(rootViewController: middleVC)
        navVCMiddle.tabBarItem = UITabBarItem(title: nil, image: UIImage(named: "middleIcon"), tag: 1)

        let settingsVC = SettingsController()
        let navVCSettings = UINavigationController(rootViewController: settingsVC)
        navVCSettings.tabBarItem = UITabBarItem(title: nil, image: UIImage(named: "settingsIcon"), tag: 2)

        viewControllers = [navVCHome, navVCMiddle, navVCSettings]
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        for tabBarItem in tabBar.items ?? [] {

             tabBarItem.title = ""
             tabBarItem.imageInsets = UIEdgeInsets(top: 6.0, left: 0.0, bottom: -6.0, right: 0.0 )
        }
    }
}
...