解決TabBarButton圖片渲染

1.解決TabBarButton圖片渲染

兩種方法:

1.直接選中全部圖片,修改一個屬性:Render as ? ?選擇:Original Image


2.抽取UIImage分類,提供不要渲染的方法

為什么要封裝到分類 ? ? ?提高方法的復用性

3.修改插件 ? 目的:讓自己添加圖片的方法,也有插件的提示效果

3.1如何找到插件的安裝位置

分析:插件是安裝在電腦的上的,安裝到哪里,插件的方法里面一定會提供

找到插件的源代碼,進入源代碼搜索 ? ? 搜索什么關(guān)鍵字呢? ? 在哪搜索?

command+f 搜索? ? 不可以 ?只能在當前類中搜索

全局搜索點放大鏡圖標搜索和路徑相關(guān)的關(guān)鍵字,一個一個試一下(path,file) ? ?試過之后發(fā)現(xiàn) install_path能找到安裝路徑


之后發(fā)現(xiàn)LIBRARY(library)這個文件找不到? ? ? ? 其實這個文件就是資源庫

在這之前要先了解為什么我們電腦的目錄(文件夾名字)有的是中文,有的是英文??

首先要先設置自己的電腦隱藏的文件可見, ? 然后發(fā)現(xiàn)中文的文件夾下都有一個本地化文件


本地化文件:會根據(jù)電腦設置的語言,把文件夾名稱翻譯成對應的語言

我們把資源庫中的這個文件刪除就發(fā)現(xiàn)資源庫名稱變成了library了

2.解決TabBarButton標題渲染

看到標題被渲染成藍色,我們這要想到這是TabBar的主題顏色(默認是藍色)tintColor

那么我們就要設置標題的屬性

按鈕標題 => 按鈕內(nèi)容 => 對應子控制器的tabBarItem

怎么設置按鈕標題顏色? ? ? 一次只能設置一個

通過tabBarItem:模型可以設置那么通過哪個屬性修改呢?

我們可以進tabBarItem頭文件去找,但是找不到 ? ? ?那么我們就去tabBarItem它的父類去找, 找到一個方法

- (void)setTitleTextAttributes:(nullable NSDictionary *)attributes forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

Attributes富文本:可以設置文字顏色,字體,陰影,圖文混排

描述文本屬性,通過key,和value去設置文字屬性

NSMutableDictionary*attr = [NSMutableDictionarydictionary];

attr[NSForegroundColorAttributeName] = [UIColorblackColor];

[itemsetTitleTextAttributes:attrforState:UIControlStateSelected];

怎么拿到所有的TabBarButton?

拿不到TabBarButton,我們只能拿到TabBarItem ,并且知道修改TabBarItem能達到修改TabBarButton的目的(MVC思想)

但是修改TabBarItem一次只能修改一個,如何一次性修改所有的TabBarItem?

可以通過+ (instancetype)appearance;這個類方法拿到所有的TabBarItem

// 獲取所有UITabBarItem

UITabBarItem*item = [UITabBarItemappearance];

注意:通過選中狀態(tài)設置文字字體是不行的,沒有效果

NSMutableDictionary*attr = [NSMutableDictionarydictionary];

字典的key值怎么傳?? ??——> 看這個方法的描述——>using the keys found in NSAttributedString.h.

——>去這個類中找到隊形的key ? ? ? UIkit—>NSAttributedString.h

attr[NSFontAttributeName] = [UIFontsystemFontOfSize:13];

[itemsetTitleTextAttributes:attrforState:UIControlStateNormal];

只有通過Normal狀態(tài)下設置才行

attr[NSForegroundColorAttributeName] = [UIColorblackColor];

[itemsetTitleTextAttributes:attrforState:UIControlStateSelected];

只有在顯示之前設置才會生效一般我們把這些設置寫在+(void)load ?方法里面 ? 這個方法只會加載一遍

// 什么時候調(diào)用:第一次加載類的時候調(diào)用

// 只會調(diào)用一次

+ (void)load ?{ ?}

// 什么時候調(diào)用:第一次使用類或者它的子類的時候調(diào)用

// 有可能會調(diào)用多次

+ (void)initialize { ?}

注意點:

1.任何對象都能使用appearance嗎?

不是 ? 只有遵守UIAppearance協(xié)議 (或父類遵守) ?才能使用appearance

2.任何屬性都可以使用appearance設置嗎?

不能

3.哪些屬性可以通過appearance設置? ? ?——>去看看屬性的區(qū)別

只有帶有UI_APPEARANCE_SELECTOR宏屬性,才能去設置


4.如果使用appearance設置屬性,必須要在顯示之前去設置.

5.使用appearance設置某些屬性,那這些屬性在整個工程中都生效

3.修改TabBarButton的位置


發(fā)現(xiàn)TabBar中間位置設置了圖片不顯示———>原因是圖片被渲染———>為什么正常狀態(tài)下圖片會被渲染———>圖片太大(圖片超出了TabBar的范圍)

圖片位置怎么修改———>修改frame———>此方法不可行———>那么還有那些方法可以修改圖片的位置呢??

修改圖片的內(nèi)間距 ? ?可以辦到 ? ? ?那么這個屬性名字是什么?? ?———>去頭文件找——> 找不到就去父類找

我們找到imageInsetsz這個屬性可以修改

vc2.tabBarItem.imageInsets=UIEdgeInsetsMake(7,0, -7,0);

注意:有些時候我們找到了能用的屬性,但是我們通過一個對象卻無法調(diào)用這個屬性

原因:調(diào)用對象不對. ? ?我們進頭文件去找到的屬性可能是其他類的屬性 ? 我們要用對應的類對象去調(diào)用這個屬性

怎么找到真正能調(diào)用屬性的類對象?? ? ? ? 一直往上找,找到interface ? interface后面的就是這個對象

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 一 、使用git管理工程 1、可以使用OSChina遠程管理工程(免費) 2、可以使用GitHub網(wǎng)站進行遠程管理...
    YuGHo閱讀 2,581評論 1 3
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,657評論 4 61
  • 并不是每次邂逅都是美麗的,并不是每段回憶都是美好的。 ...
    西瓜甜甜啦閱讀 240評論 2 16

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