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];
// 设置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的方式