1. 程式人生 > >iOS UITabBar屬性詳解 UITabBarController 底部 UITabBarItem 間距調整

iOS UITabBar屬性詳解 UITabBarController 底部 UITabBarItem 間距調整

http://www.2cto.com/kf/201505/402189.html

iOS UI Tab開發(iOS 8)

tab這種樣式,類似於單選,可以叫radio-style,這是一個現在主流的layout-design,它讓APP內容結構清晰,開發分工邏輯明確,經典的就是微信,時鐘等

\\

綜述一下:

1.UITabBarController繼承UIViewController,是一個ViewController container

2.UITabBarController擁有一個(readonly)的TabBar,TabBar擁有一到多個TabBarItem

3.每一個Item需要關聯一個自定義的UIViewController,有一個viewControllers屬性,儲存著每一個TabBarItem對應的ViewController,這個陣列中元素的順序就是Tabbar上展現的順序

4.TabBarItem展現的Title-Text,如果沒有自己設定,預設是對應的ViewController的title,Image應該主動設定好

5. UITabBarControllerDelegate protocol提供了監控TabBar的操作回撥API

6.Embed in UITabBarController的每一個ViewController都會自動調整自己的layout來適應,以防止遮擋下方的Bar

7.TabBarItem如果>=6個,TabBarController會自動調整成如下:

\\

接下來說說API

@property(nonatomic, readonly) UITabBar *tabBar

只讀,不應該嘗試去修改,為了配置item,應該去修改ViewControllers屬性,它存在的意義是 only for situations where you want to display an action sheet using the showFromTabBar:method of the UIActionSheet class.

管理ViewControllers API

@property(nonatomic, copy) NSArray *viewControllers

這很明顯是支援自定義的,另外一點:這個屬性被賦值時,customizableViewControllers

屬性的值與之一樣

如果在runtime更換這個屬性,之前selected的index如果不存在,預設會select index = 0

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

意義不大,自我衡量是否需要

@property(nonatomic, copy) NSArray *customizableViewControllers

這個的用處在上面的圖中給過形象化的解釋

@property(nonatomic, readonly) UINavigationController *moreNavigationController

為了管理customizableViewControllers而產生的一個NavigationController

管理被選擇中的Tab的API

@property(nonatomic, assign) UIViewController *selectedViewController

可以設定或者訪問當前選中的ViewController

@property(nonatomic) NSUInteger selectedIndex

與selectedViewController對應

UITabBarControllerDelegate

決定哪一個tab是否應該被選中

在選中tab之後執行action

在自定義tab順序前後執行action

重寫view旋轉設定

支援配置自定義過渡動畫

對應的method請參閱文件

UITabBar

//讓使用者自定義items的佈局,系統會自動彈出一個帶有Done按鈕的檢視

[self.tabBar beginCustomizingItems:@[item1, item3, item2]];

// 設定item位置的樣式

self.tabBar.itemPositioning = UITabBarItemPositioningCentered;

//以下2個屬性需要設定Centered樣式才有作用,否則無效

self.tabBar.itemSpacing = 80.0f;

self.tabBar.itemWidth = 30.0f;


UITabBarItem

UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Test" image:nil tag:0];

//設定item上title-text的顏色

[item setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateNormal];

[item setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor darkGrayColor]} forState:UIControlStateSelected];

?
1 // 設定Item的image屬性,To prevent system coloring,預設系統會使用圖片資源的alpha值自己生成出來一張圖片,很多時候我們設定圖片不起作用的原因

item.image = [[UIImage imageNamed:@"color"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

//設定背景圖片的內凹變化,正值向內縮小,負值向外延伸

UIEdgeInsets insets;

insets.left = -5;

insets.right = -5;

item.imageInsets = insets;

//設定item.title位置偏移

UIOffset offset;

offset.horizontal = 30;

offset.vertical = -10;

[item setTitlePositionAdjustment:offset];

UITabBarDelegate

提供了操作Tab時的回撥API,詳細參考官方文件

總結:

內容展示類,功能類的APP最外層的layout-design,推薦基於Tab的方式