UITabBarController常見問題以及解決方案

常見問題


1.設(shè)置UITabBarItem
2.items在選中狀態(tài)下的圖片校摩、字體的顏色和大小
3.自定義TabBar


1.設(shè)置UITabBarItem


首先埃撵,羅列出UITabBarController中常用到的類:UITabBarController #UITabBarItem #UITabBar #UIBarItem涡驮,其中UIBarItem是最容易被忽略的乳讥。

UIBarItem是UITabBarItem的父類,<code>NS_CLASS_AVAILABLE_IOS(2_0) @interface UITabBarItem : UIBarItem </code>上面是官方開發(fā)文檔的內(nèi)容耸携,有時候我們在找屬性或者方法遇到困難的時候昭殉,不妨去父類或者相關(guān)協(xié)議里面去看看苞七,可能會有意想不到的內(nèi)容。如下:
<code>@property(nullable, nonatomic,copy) NSString*****title;//標(biāo)題
@property(nullable, nonatomic,strong)UIImage***image;//默認(rèn)狀態(tài)下的圖片
@property(nonatomic) UIEdgeInsets imageInsets;//設(shè)置圖片的大小</code>

設(shè)置UITabBarItem一般的情況下我們都會自定義一個方法:
<code>
-(void)addChildViewController:(UIViewController )childController imageName:(NSString)name selectedImageName:(NSString)selectedName title:(NSString)title{

childController.tabBarItem.image = [UIImage imageNamed:name];

childController.tabBarItem.selectedImage = [[UIImage imageNamed:selectedName]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];//取消系統(tǒng)在選中狀態(tài)下多圖片的渲染

childController.tabBarItem.title = title;

YMNavgationController*NC = [[YMNavgationController alloc]initWithRootViewController:childController];

[self addChildViewController:NC];

}
</code>

然后就可以調(diào)用此方法設(shè)置相關(guān)的信息:
<code>-(void)addHomePage{

YMViewController*VC = [[YMViewController alloc]init];
[self addChildViewController:VC
                   imageName:@"tabBar_essence_icon"
           selectedImageName:@"tabBar_essence_click_icon"
                       title:@"首頁"];

}

2.items在選中狀態(tài)下的圖片挪丢、字體的顏色和大小

前面已經(jīng)解決了圖片去除系統(tǒng)渲染問題
<code> childController.tabBarItem.selectedImage = [[UIImage imageNamed:selectedName]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];//取消系統(tǒng)在選中狀態(tài)下多圖片的渲</code>

調(diào)用系統(tǒng)的<code>@property(nonatomic) UIEdgeInsets imageInsets;//設(shè)置圖片的大小</code>可以改變圖片的大小,這個其實是調(diào)整圖片的內(nèi)邊距卢厂。

圖片問題解決了乾蓬,下面就是文字問題。解決文字問題就要用到UIBarItem這個類慎恒,系統(tǒng)給我們提供了一個方法<code>- (void)setTitleTextAttributes:(nullable NSDictionary<NSString *,id> *)attributes forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

其中的NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;用處很大任内,這是為一次性解決問題體統(tǒng)的宏;以后大家遇到類似的宏可以試試融柬;

//設(shè)置是否選中的文字顏色和大小
+(void)initialize{

NSMutableDictionary*attbs= [NSMutableDictionary dictionary];

attbs[NSFontAttributeName] = [UIFont systemFontOfSize:12];

attbs[NSForegroundColorAttributeName] = [UIColor grayColor];

NSMutableDictionary*selecteAttbs = [NSMutableDictionary dictionary];

selecteAttbs[NSFontAttributeName] = attbs[NSFontAttributeName];

selecteAttbs[NSForegroundColorAttributeName] =[UIColor darkGrayColor];

UITabBarItem*items = [UITabBarItem appearance];

[items setTitleTextAttributes:attbs forState:UIControlStateNormal];

[items setTitleTextAttributes:selecteAttbs forState:UIControlStateSelected];

}

大家可以考慮下把這種設(shè)置寫在+(void)initialize方法下的好處死嗦,當(dāng)然寫在其他地方也不會錯;

3.自定義TabBar

這個問題其實很簡單粒氧,大家在網(wǎng)上很容易找到資源越除,下面我就把重要的方法寫下來

新建一個類,繼承UITabBar
重寫-(instancetype)initWithFrame:(CGRect)frame方法外盯,主要是解決自定義的按鈕問題摘盆,如果系統(tǒng)提供的方法能解決問題,我們也不會去自定義饱苟,主要是解決新浪微博等中間+按鈕問題

<code>-(instancetype)initWithFrame:(CGRect)frame{

if (self = [super initWithFrame:frame]) {
    
    self.backgroundColor = [UIColor whiteColor];

    
    [self setBackgroundImage:[UIImage imageNamed:@"tabbar-light"]];
    
    UIButton*addButton = [UIButton buttonWithType:UIButtonTypeCustom];
    
    [addButton setImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
    
    [addButton setImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted];
    
    [self addSubview:addButton];
    
    self.addButton = addButton;
    
    
}</code>
重寫-(void)layoutSubviews方法孩擂,這個主要是多按鈕進行布局

<code>-(void)layoutSubviews{

CGFloat width = self.width/5;

CGFloat height = self.height;

CGFloat Y = 0;

//布局加號按鈕

self.addButton.width = width;//類似的寫法是重寫了UIView的分類,然后重寫了相關(guān)的set 和get方法

self.addButton.height = height;

self.addButton.centerX = self.centerX;

//布局其他按鈕

for (NSInteger i = 0; i<self.subviews.count ;i++) {
    
    if(![self.subviews[i]
        isKindOfClass:NSClassFromString(@"UITabBarButton")]) continue;//當(dāng)遇到自定義按鈕時就跳過箱熬,自定義按鈕已經(jīng)做好布局了
    
    UIView*view = self.subviews[i];
    
    NSInteger index = i<3?(i-1):i;//有5個按鈕类垦,中間是自定義的按鈕,具體情況根據(jù)按鈕的數(shù)量而定
    
    view.frame = CGRectMake(index*width, Y, width, height);
    
}

}

</code>
有錯的地方希望大家批評指正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末城须,一起剝皮案震驚了整個濱河市蚤认,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酿傍,老刑警劉巖烙懦,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡氯析,警方通過查閱死者的電腦和手機亏较,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掩缓,“玉大人雪情,你說我怎么就攤上這事∧憷保” “怎么了巡通?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舍哄。 經(jīng)常有香客問我宴凉,道長,這世上最難降的妖魔是什么表悬? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任弥锄,我火速辦了婚禮,結(jié)果婚禮上蟆沫,老公的妹妹穿的比我還像新娘籽暇。我一直安慰自己,他們只是感情好饭庞,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布戒悠。 她就那樣靜靜地躺著,像睡著了一般舟山。 火紅的嫁衣襯著肌膚如雪绸狐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天捏顺,我揣著相機與錄音六孵,去河邊找鬼。 笑死幅骄,一個胖子當(dāng)著我的面吹牛劫窒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拆座,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼主巍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挪凑?” 一聲冷哼從身側(cè)響起孕索,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躏碳,沒想到半個月后搞旭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年肄渗,在試婚紗的時候發(fā)現(xiàn)自己被綠了镇眷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡翎嫡,死狀恐怖欠动,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惑申,我是刑警寧澤具伍,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站圈驼,受9級特大地震影響人芽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碗脊,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一啼肩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衙伶,春花似錦、人聲如沸害碾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慌随。三九已至芬沉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阁猜,已是汗流浹背丸逸。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剃袍,地道東北人黄刚。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像民效,于是被迫代替她去往敵國和親憔维。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容