iOS UITabBar属性详解 UITabBarController 底部 UITabBarItem 间距调整

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

iOS UI Tab开发(iOS 8)

tab这种样式,类似于单选,可以叫radio-style,这是一个现在主流的layout-design,它让APP内容结构清晰,开发分工逻辑明确,经典的就是微信,时钟等

iOS UITabBar属性详解 UITabBarController 底部 UITabBarItem 间距调整_第1张图片iOS UITabBar属性详解 UITabBarController 底部 UITabBarItem 间距调整_第2张图片

综述一下:

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会自动调整成如下:

iOS UITabBar属性详解 UITabBarController 底部 UITabBarItem 间距调整_第3张图片iOS UITabBar属性详解 UITabBarController 底部 UITabBarItem 间距调整_第4张图片

 

接下来说说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的方式


你可能感兴趣的:(iOS_UI)