iOS小記--UITabController

本文的主角是viewWillLayoutSubviews,在UIViewController有這樣一個(gè)方法,在VC默認(rèn)的那個(gè)view將要layoutSubViews時(shí)會(huì)被調(diào)用,在VC的子類需要的時(shí)候可以重載它,默認(rèn)的操作是個(gè)空操作,在API還有個(gè)對(duì)應(yīng)的viewDidLayoutSubviews的方法。

這里提到這個(gè)是因?yàn)殚_(kāi)發(fā)項(xiàng)目的時(shí)候碰到這樣的情況,我建了一個(gè)繼承自UITabController的controller,默認(rèn)的那個(gè)tabBar上有5個(gè)UITabBarButton,我根據(jù)需求自定義了一個(gè)view加在了tabBar的上面,這個(gè)時(shí)候我不想要這5個(gè)UITabBarButton,所以我就在viewDidLoad里把它們都移除了,這樣我的tabBar的子視圖便只有我想要的那一個(gè)。

看起來(lái)很OK,可是好景不長(zhǎng),app里面點(diǎn)過(guò)來(lái)點(diǎn)過(guò)去,然后就發(fā)現(xiàn)那5個(gè)該死的UITabBarButton就回來(lái)了,測(cè)試了很多次,發(fā)現(xiàn)是在某些頁(yè)面調(diào)用了popToViewController造成的。不過(guò)沒(méi)有關(guān)系,來(lái)一個(gè)我刪一個(gè),我再把它們刪了就好了,反正又不看。

找了蠻久,找到像上面這樣的方法,如獲至寶,重載之后簡(jiǎn)單實(shí)現(xiàn)如下:

- (void)viewWillLayoutSubViews {

for (UIView *vi in self.tabBar.subviews) {

if ([vi isKindOfClass:[IWTabBar class]]) {

continue;

}

[vi removeFromSuperview];

}

}

然后還在文檔里找到這樣一句話:

當(dāng)視圖的bounds變化時(shí)。視圖需要調(diào)整它的子視圖的位置,這個(gè)時(shí)候就會(huì)call上面的方法。

由此可見(jiàn),popToViewController是會(huì)影響到window的根視圖控制器的view的bounds的,即使沒(méi)有變化,也會(huì)重新刷新下。當(dāng)然,這些只是猜測(cè)有待驗(yàn)證。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容