(六十二)纯代码搭建UI
在Xcode6中,去掉了Empty Application的选项,因此可以通过先创建SingleView,再删除storyboard,并且把工程设置中的main Interface清空。
通过AppDelegate来创建视图和控制器。
这里演示一个带TabBar与Navigation的,注意TabBar为最底部的根,然后每个Bar的选项绑定一个navigation才是正确的方法,否则无法根据Bar的选项设定navigation的标题。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; self.window.rootViewController = [[UITabBarController alloc] init]; [self.window makeKeyAndVisible]; return YES; }
然后根据相应的控制器代码,修改tabBar,如果要自定义tabBar的点选和未点选状态,通过下面的代码:
home.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"]; home.tabBarItem.selectedImage = [[UIImage imageNamed:@"tabbar_home_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];注意后面的一句,有一个渲染的选项,在iOS7+中,选中时图片会被自动渲染为蓝色,如果要自定义图片要将渲染模式改为Original。
Tip:tabBar的标题、navigation的标题可以通过控制器的title属性进行全局设置:
home.title = @"首页”;
为了iOS6和iOS7+的适配,一般是通过pch定义iOS7的判断,pch文件的路径设置:
Tip:发现工程出现no such file or directory...错误,可以通过工程设置搜索缺少的文件然后像上面这样改路径。
下面给出一个图片适配的例子,具体原理就是做两套图片,iOS7的后缀为_os7,通过拦截图片设置(给UIImage增加分类)来对每张图片进行设置:
注意判断没有_os7结尾图片的情况。
+ (UIImage *)imageWithName:(NSString *)name{ NSString *newName = @""; if (iOS7) { newName = [name stringByAppendingString:@"_os7"]; } UIImage *image = [UIImage imageNamed:newName]; // 没有iOS7的图片,使用无后缀图片 if (image == nil) { newName = name; image = [UIImage imageNamed:name]; } return image; }