关于UIViewController
1.两个UIViewController之间跳转时的生命周期:
- 调用第一个控制器的viewWillDisappear方法
- 调用第二个控制器的viewWillAppear方法
- 调用第二个控制器的viewDidAppear方法
- 调用第一个控制器的viewDidDisappear方法
2.UIViewController创建时的生命周期:
-
loadView:当第一次使用控制器的view时,会调用loadView方法创建view,
一般在这里自定义view -
viewDidLoad:当控制器的view创建完毕时会调用,也就是在loadView后调用,
一般在这里添加子控件、初始化数据 -
viewDidUnload:当控制器的view因为内存警告被销毁时调用,
一般在这里回收跟界面相关的资源(界面都会销毁了,跟界面相关的资源肯定不要了)
关于UINavigationController
1.统一设置导航栏按钮:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
// 在该方法里做你想要做的事情
[super pushViewController:viewController animated:animated];
}
2.推出控制器并隐藏tabBar:
viewController.hidesBottomBarWhenPushed = YES;
3.左滑返回无效的方法:
分析:
1.手势被清空
2.可能手势代理做了一些事情,导致手势失效)
设置该属性interactivePopGestureRecognizer的delegate
4.设置导航条背景图片的方法:
[navBar setBackgroundImage:[UIImage imageNamed:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault];
5.不要给UIScrollView子控件增加内边距的方法:
self.automaticallyAdjustsScrollViewInsets = NO;
// iOS 11后更改的新方法:
self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
关于UITabBarController
1.TabBar中的图片被渲染的解决办法
- 直接更改图片的Rander As属性,设置为Original Image;
如果加载图片过多,一一设置太过麻烦,可以点击其中一个,按Command + A
,即全部选中,在更改该属性即可。 - 通过代码进行更改:
UIImageRenderingModeAutomatic // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。
UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,不使用Tint Color。
UIImageRenderingModeAlwaysTemplate // 始终根据Tint Color绘制图片,忽略图片的颜色信息。
UIImage.renderingMode = UIImageRenderingModeAlwaysOriginal;
2.设置按钮颜色属性:
UITabBarItem *item = [UITabBarItem appearanceWhenContainedIn:self, nil];
NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
attrs[NSForegroundColorAttributeName] = [UIColor blackColor];
[item setTitleTextAttributes:attrs forState:UIControlStateSelected];
注意:设置字体尺寸只有设置正常状态下才会有效果
3.设置全局TabBar方法注意点:
- 只有遵守了UIAppearence协议的类才可以使用该方法
- 会使整个工程所有的tabBar改变,一般使用
appearanceWhenContainedIn:
方法。 - 哪些属性可以通过appearance设置:只有被UI_APPEARANCE_SELECTOR宏修饰的属性才能设置
- 只能在控件显示之前设置才有作用
- 一般用于大规模的设置。ex:夜间模式
4.调用系统私有类和属性的方法:
- 使用
NSClassFromString:
方法去反编译得到该类型。 - 可以使用
setValue:forKey:
(kvc)去底层找到该属性并更改 - 利用Runtime去更改
网友评论