如何解決問題
重寫 traitCollection,就能創(chuàng)建超過5個(gè) tab猾警,并且不出現(xiàn)More tab孔祸。這種方式?jīng)]有改變UITabBarController的使用方式,入侵性最小发皿,不需要使用第三方庫(kù)崔慧。
override var traitCollection: UITraitCollection {
let realTraits = super.traitCollection
let lieTrait = UITraitCollection.init(horizontalSizeClass: .regular)
return UITraitCollection(traitsFrom: [realTraits, lieTrait])
}
當(dāng)你重寫 traitCollection 并返回一個(gè)包含 .regular 水平尺寸類別的 UITraitCollection,系統(tǒng)將會(huì)認(rèn)為當(dāng)前設(shè)備的寬度足夠大穴墅,可以顯示更多的標(biāo)簽惶室。這樣即使在寬度有限的設(shè)備(如 iPhone)上,你也能顯示超過五個(gè)標(biāo)簽封救。
問答
https://stackoverflow.com/questions/10313845/can-we-add-more-than-five-tab-bar-in-ios-sdk
解釋
在iOS應(yīng)用中拇涤,默認(rèn)情況下,當(dāng)設(shè)備的尺寸類別(Size Class)為緊湊(Compact)時(shí)誉结,UITabBarController 只允許顯示最多五個(gè)標(biāo)簽(Tab)鹅士。這是因?yàn)榫o湊的尺寸類別意味著屏幕寬度有限,無法容納更多的標(biāo)簽惩坑。
通過重寫 traitCollection 屬性并將水平尺寸類別(horizontalSizeClass)強(qiáng)制設(shè)為常規(guī)(Regular)掉盅,你可以讓系統(tǒng)認(rèn)為設(shè)備有足夠的寬度來顯示更多的標(biāo)簽也拜。這會(huì)導(dǎo)致 UITabBarController 在顯示標(biāo)簽時(shí)使用適合常規(guī)尺寸類別的布局,從而允許顯示超過五個(gè)標(biāo)簽趾痘。
以下是具體解釋:
代碼詳解
override var traitCollection: UITraitCollection {
let realTraits = super.traitCollection
let lieTrait = UITraitCollection(horizontalSizeClass: .regular)
return UITraitCollection(traitsFrom: [realTraits, lieTrait])
}
1慢哈、let realTraits = super.traitCollection:獲取當(dāng)前視圖控制器的實(shí)際特性集合。
2永票、let lieTrait = UITraitCollection(horizontalSizeClass: .regular):創(chuàng)建一個(gè)新的特性集合卵贱,水平尺寸類別設(shè)為 .regular。
3侣集、return UITraitCollection(traitsFrom: [realTraits, lieTrait]):合成實(shí)際特性和偽特性键俱,返回一個(gè)包含兩者的新特性集合。
結(jié)果
通過這種方式世分,UITabBarController 會(huì)認(rèn)為它有足夠的空間來顯示更多的標(biāo)簽编振,進(jìn)而允許超過五個(gè)標(biāo)簽的顯示。
使用場(chǎng)景和注意事項(xiàng)
1臭埋、使用場(chǎng)景:這種方法適用于你需要在標(biāo)簽欄中顯示超過五個(gè)標(biāo)簽踪央,并且不希望使用更多復(fù)雜的解決方案(如自定義標(biāo)簽欄)。
2瓢阴、注意事項(xiàng):強(qiáng)制修改特性集合可能會(huì)影響其他布局行為畅蹂,導(dǎo)致意外的問題。例如炫掐,其他依賴于尺寸類別的視圖和控件可能會(huì)認(rèn)為它們有更多的空間魁莉,從而影響其布局和顯示。因此募胃,使用此方法時(shí)需要進(jìn)行充分測(cè)試旗唁,確保應(yīng)用在不同設(shè)備和方向上都能正常工作。
總結(jié)來說痹束,通過重寫 traitCollection检疫,可以讓系統(tǒng)認(rèn)為設(shè)備具有更寬的尺寸,從而允許在 UITabBarController 中顯示超過五個(gè)標(biāo)簽祷嘶。然而屎媳,這種方法應(yīng)謹(jǐn)慎使用,以避免其他布局問題论巍。