Изменение высоты UITabBar в iOS7/8?
Я пытаюсь изменить высоту запаса UITabBar до 44px, как и высота строки вкладки Tweetbot. Я также видел, что некоторые другие приложения тоже делают это.
![]()
однако, когда я пытаюсь установить высоту, он все равно остается тем же
self.tabBar.frame.height = 40
нам не разрешено изменять высоту панели вкладок? и если да, то какая хорошая альтернатива? используя панель инструментов?
Ответы
Ответ 1
Ответ SomeGuy выше работал у меня. Здесь Swift перевод для тех, кто может понадобиться. Я сделал высоту близкой к тому, что, по-видимому, использует большинство популярных приложений.
class TabBar: UITabBar {
override func sizeThatFits(size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 38
return sizeThatFits
}
}
Ответ 2
Кажется, все говорят, что это нелегко сделать.
В своем раскадровке дайте UITabBar собственное имя подкласса, затем выполните подкласс со следующими
Это указывает всем представлениям, которые используют панель вкладок, чтобы она была определенной высотой.
@implementation MyTabBar
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = 100;
return sizeThatFits;
}
@end
![enter image description here]()
Ответ 3
Для Swift 3 и xcode 8
extension UITabBar {
override open func sizeThatFits(_ size: CGSize) -> CGSize {
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = 80 // adjust your size here
return sizeThatFits
}
}
Ответ 4
В вашем UITabBarController
- (void)viewWillLayoutSubviews {
CGRect tabFrame = self.tabBar.frame;
tabFrame.size.height = 80;
tabFrame.origin.y = self.view.frame.size.height - 80;
self.tabBar.frame = tabFrame;
}
Ответ 5
В быстром он даже проще, чем все предлагаемые выше решения, используя расширения для UITabBar, не требуется никакого подкласса:
extension UITabBar {
override public func sizeThatFits(size: CGSize) -> CGSize {
super.sizeThatFits(size)
var sizeThatFits = super.sizeThatFits(size)
sizeThatFits.height = <Insert your height here>
return sizeThatFits
}
}
Ответ 6
Если у вас включена автоматическая компоновка, вам нужно переопределить instrinsicContentSize вместо
Правильное использование intrinsicContentSize и sizeThatFits: в подклассе UIView с автоопределением
class TabBar: UITabBar {
override func intrinsicContentSize() -> CGSize {
var intrinsicSize = super.frame.size
intrinsicSize.height = 120
return intrinsicSize
}
}
Ответ 7
Разработчик не владеет tabBar, это делает фреймворк. Он будет бороться с вами, чтобы убедиться, что tabBar остается одинаковой высоты. Если вы хотите обойти это, вы можете создать свою собственную панель инструментов и добавить ограничения autlayout на ее высоту, чтобы заставить ее оставаться на любой высоте, которую вы хотели бы.
Ответ 8
Если вы находитесь на iOS 11, то следующее поможет
-(CGSize)sizeThatFits:(CGSize)size
{
CGSize sizeThatFits = [super sizeThatFits:size];
sizeThatFits.height = 60;
if (@available(iOS 11.0, *)) {
UIWindow *window = UIApplication.sharedApplication.keyWindow;
CGFloat bottomPadding = window.safeAreaInsets.bottom;
sizeThatFits.height += bottomPadding;
}
return sizeThatFits;
}
В принципе, нужно покрывать безопасную область, иначе высота закладки на iPhone X оказывается низкой.