一、問題描述
標簽欄(UITabBar)在項目開發中經常會用到,它里面的每一個標簽項(UITabBarItem)都可以設置不同的圖片和標題文字。過去不管我們使用 iPad 還是 iPhone 運行程序,圖片和文字都是垂直排列的(圖標在上,文字在下):
而當系統更新到了 iOS11 以上時,圖片和文字在 iPad 下就變成了左右排列(iPhone 下仍然是上下排列)。
二、解決辦法
iPad 下的這種左右排列方式是 iOS11 的新特性,如果想要改回上下排列的話可以通過重寫 UITabBar 的 traitCollection 方法來實現。
方法1:自定義一個 UITabBar
(1)我們通過繼承 UITabBar 來實現一個自定義的 tabbar,覆蓋父類的 traitCollection 方法即可。
1
2
3
4
5
6
7
8
9
|
class
MyTabBar
:
UITabBar
{
//讓圖片和文字在iOS11下仍然保持上下排列
override
open
var
traitCollection:
UITraitCollection
{
if
UIDevice
.current.userInterfaceIdiom == .pad {
return
UITraitCollection
(horizontalSizeClass: .compact)
}
return
super
.traitCollection
}
}
|
(2)然后代碼中使用這個自定義的 tabbar,運行效果如下:
方法2:擴展 UITabBar
(1)如果想讓項目中所有的 tabbar 都改成垂直排列圖標和文字,可以直接對 UITabBar 進行擴展,重寫其 traitCollection 方法。
(2)運行效果同上:
1
2
3
4
5
6
7
8
9
|
extension
UITabBar
{
//讓圖片和文字在iOS11下仍然保持上下排列
override
open
var
traitCollection:
UITraitCollection
{
if
UIDevice
.current.userInterfaceIdiom == .pad {
return
UITraitCollection
(horizontalSizeClass: .compact)
}
return
super
.traitCollection
}
}
|
(2)運行效果同上:
原文出自:www.hangge.com 轉載請保留原文鏈接:http://www.hangge.com/blog/cache/detail_1900.html
OC中重寫TraitColletion方法
//重寫traitCollection方法,使UITabbar保持圖為垂直排列,防止在ipad11出現水平排列
自定義TabBar
- (UITraitCollection *)traitCollection {
if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
return [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassCompact];
}
return [super traitCollection];
}