第二天
一、App启动图不生效
在Assets.xcassets设置LaunchImage之后,启动App不生效。
1、在Project->General->App Icon and Launch Images项,删除Launch Screen File。
2、进入LaunchScreen.storyboard,取消勾选Use as Launch Screen。
二、LaunchImage的设置
如图,右边栏目中的各项代表App启动图支持的版本、设备类型、屏幕方向等。根据需要勾选即可。
三、手动导入Masonry
GitHub地址:Masonry - GitHub
Clone地址:Masonry - Clone
将Masonry工程下载到本地之后,解压、打开文件夹,找到Masonry文件夹,直接拖入工程目录中,在需要的地方#import "Masonry.h",即可正常使用。
四、手动创建的.h文件不能关联
解决办法:清理Xcode缓存,重启Xcode。
五、self.view顶部对齐NavigationBar底部
方法一:设置NavigationBar和Tabbar的translucent属性为NO。
方法二:设置UIViewController的edgesForExtendedLayout属性为UIRectEdgeNone。
通过设置Tabbar的translucent为NO,同时设置UIViewController的edgesForExtendedLayout属性为UIRectEdgeNone。可以完美解决控制器界面超出可视范围的问题。
效果如下图:(图一设置前,图二设置后)
六、一个文件里写两个类
一个OC文件里(.h和.m),可以定义一个及一个以上的类。
定义方法如下:
@interface YourClassName () @end
@implementation YourClassName @end
#import "LeonMainPageVC.h"
@interface LeonMainPageVC ()
@end
@implementation LeonMainPageVC{
MainPageSearchController *_searchController;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
@end
/**
如果写在LeonMainPageVC.h中,可以将MainPageSearchController及其属性和方法暴露出来
@interface MainPageSearchController : BaseSearchController
//set your property or method here!
@end
*/
@interface MainPageSearchController()
@end
@implementation MainPageSearchController
- (instancetype)initWithSearchResultsController:(UIViewController *)searchResultsController{
if (self = [super initWithSearchResultsController:searchResultsController]) {
[self configuration];
}
return self;
}
- (void)configuration{
//设置UISearchController的显示属性,以下3个属性默认为YES
//搜索时,背景变暗色
self.dimsBackgroundDuringPresentation = NO;
//搜索时,背景变模糊
if (@available(iOS 9.1, *)) {
self.obscuresBackgroundDuringPresentation = NO;
} else {
// Fallback on earlier versions
}
//隐藏导航栏
self.hidesNavigationBarDuringPresentation = NO;
}
@end
七、Application tried to present modally an active controller
在使用如下代码时,程序Crash,
报错:Application tried to present modally an active controller ...。
原因及解决方法未知......
[self addChildViewController:_searchController];
_searchController.view.frame = self.view.bounds;
[self.view addSubview:_searchController.searchBar];
[_searchController didMoveToParentViewController:self];
八、UIsearchBar样式修改
设置UISearchBar的背景色、输入框的背景色、取消按钮颜色、搜索框Icon、光标颜色、输入文字颜色......
参考:简书-iOS UISearchController样式全面设置
self.searchBar.barTintColor = [UIColor whiteColor];
[self.searchBar setImage:[UIImage imageNamed:@"searchController_seachIcon"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
//设置输入框的方法一
// _searchField = [self getSearchControllerTextField];
// _searchField.backgroundColor = UIColorFromRGB(0xe6e8eb);
// _searchField.tintColor = [UIColor redColor];
//设置输入框的方法二
[[UITextField
appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setBackgroundColor:UIColorFromRGB(0xe6e8eb)];
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:UIColorFromRGB(0x666666)];
[self.searchBar setTintColor:UIColorFromRGB(0xff6161)];
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:UIColorFromRGB(0xff6161)];
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTitle:@"Cancel"];
//找到UISearchBar上的TextField
- (UITextField *)getSearchControllerTextField{
for (UIView *view in self.searchBar.subviews[0].subviews) {
if([view isKindOfClass:[UITextField class]]){
return (UITextField *)view;
}
}
return nil;
}
//找到UISearchBar上的CancelButton
- (UIButton *)getSearchControllerButton{//仅在showCancelButton为True时好用
for (UIView *view in self.searchBar.subviews[0].subviews) {
if([view isKindOfClass:[UIButton class]]){
return (UIButton *)view;
}
}
return nil;
}