IOS:重复点击UITabbar项目会导致在IOS7中减小UITabbar按钮项目的大小

5
我在这里使用了Tabbar视图控制器,添加了5个项目并给定了图片边距(24,0,0,6)。 所有按钮图片都是在xib中添加的[在Bar项下-> 图像]。请帮忙看一下。 谢谢。

1
我在这里回答了一个类似的问题。看起来是同样的问题 - iOS Tab Bar icons keep getting larger ... 基本上是由于图像插入不平衡引起的 - staticVoidMan
请查看此链接:https://dev59.com/Zn3aa4cB1Zd3GeqPgq8v。我的问题也是一样的,请帮帮我。 - user3840618
2个回答

9

在这里补充一个相似的答案: iOS Tab Bar icons keep getting larger

我不确定这是否是iOS7的 bug,但我注意到图片插图需要平衡。

您已经为顶部和右侧指定了插图,但:

  1. 如果您设置了顶部插图,则需要将其负值设置为底部插图以保持平衡。
  2. 如果您设置了右侧插图,则需要将其负值设置为左侧插图以保持平衡。

因此,不要像 (24,0,0,6) 这样拥有图片插图,请使用平衡的图片插图,例如 UIEdgeInsetsMake(24,-6,-24,6)

这样做应该可以保护您的 tabBarItem 图像不会在每次点击时损坏。


如果这不符合您的要求,请重新设计您的 tabBarItem 图像,以便您可以拥有平衡插图或者...没有插图。


如果我使用你提供的相同尺寸,选项卡项目会变得很大,并且会超出屏幕。如果您不介意,请查看此链接:https://dev59.com/Zn3aa4cB1Zd3GeqPgq8v。我也遇到了同样的问题。谢谢。 - user3840618
@user3840618:基本上你想要从顶部和右侧推送图像,但是如果图像插入不平衡,你每次都会出错。无论如何...图像尺寸是多少?我认为,如果你在图像编辑器中正确对齐并编辑图像,然后再在应用程序中使用它,效果会更好。 - staticVoidMan
做这个的意义是什么?这样做并不会改变任何事情,所以最好将其保留为0,0,0,0。 - Next Developer
这个漏洞已在iOS11中修复。 - Tà Truhoada
1
我在iOS 11上仍然看到这个。 - de.
@de. 我想出了一个解决方法,可以完成工作。 - Adrian

1

这是我遇到的一个与 UITabBarControllerUITabBar 相关的 bug 的解决方法。如果我在选择了一个 UITabBarItem 后再次轻触它,图标会变小。我想要做的是禁用触摸。 UITabBarItem 只有一个 isEnabled 设置,如果我将其设置为 false,它会变灰色... 这不是我想要的。

我使用这个答案的一个派生来解决此问题。 在具有3个选项卡的UITabBarController中,通过打印tabBarController.subviews,我看到了3个UITabBarButtons和一个UIBarBackground。 UIBarBackground的框架起点始终是(0, 0),将其放在排序数组的前面,因此我不需要知道子视图是什么,只需要知道“它在哪里”以及它是否总是存在。 UIBarBackground始终位于按frame.minX排序的tabBarController.subviews数组的前面,因此我只需要从前面将其删除即可。

解决方案

这就是扩展的样子:

extension UITabBarController {
    var buttonViews: [UIView] {
        var tabBarButtons = tabBar.subviews.sorted(by: {$0.frame.minX < $1.frame.minX})
        tabBarButtons.removeFirst()
        return tabBarButtons
    }
}

我还在我的常量文件中创建了一个struct,这样我就不必记住选项卡的名称了。
struct TabBarItem {
    static let firstTab = 0
    static let secondTab = 1
    static let thirdTab = 2
}

最后,如何使用:

viewDidAppear 中(而不是 viewDidLoad),添加以下行以禁用您不想要的但不希望变灰的 UITabBarItem

tabBarController?.buttonViews[TabBarItem.firstTab].isUserInteractionEnabled = false

viewWillDisappear中,按照以下方式重新启用选项卡:
tabBarController?.buttonViews[TabBarItem.firstTab].isUserInteractionEnabled = true

最终我使用了你的解决方案,因为我需要图像具有更大的尺寸,而平衡图像插图并没有给出期望的结果。 - batman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接