2019独角兽企业重金招聘Python工程师标准>>>

appearance 的使用注意点

+(void)load
{//appearance 一般在load中加载使用,若要操作控件,必须在UI没有显示的情况下去操作NSArray *array =@[self];UITabBarItem *tabBarItem =  [UITabBarItem appearanceWhenContainedInInstancesOfClasses:array];NSMutableDictionary *dict =[NSMutableDictionary dictionary];dict[NSForegroundColorAttributeName] = [UIColor whiteColor];[tabBarItem setTitleTextAttributes:dict forState:UIControlStateSelected];//设置字体大小  必须是在UIControlStateNormal 设置才有效果NSMutableDictionary *dict1 =[NSMutableDictionary dictionary];dict1[NSFontAttributeName] = [UIFont systemFontOfSize:13];[tabBarItem setTitleTextAttributes:dict1 forState:UIControlStateNormal];
}

如果直接用UIButton包装成UIBarButtonItem,会扩大点击区域

UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:image forState:UIControlStateNormal];
[btn setImage:heightImage forState:UIControlStateHighlighted];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[btn sizeToFit];
//如果直接用UIButton包装成UIBarButtonItem,会扩大点击区域
// UIBarButtonItem *barbtn =[[UIBarButtonItem alloc]initWithCustomView:btn];//阻止扩大点击区域的解决办法只有在外面再次包装一层UIview
UIView *uiview = [[UIView alloc]initWithFrame:btn.bounds];
[uiview addSubview:btn];
[[UIBarButtonItem alloc]initWithCustomView:uiview]

UIBarButtonItem:描述按钮具体的内容.<br>UINavigationItem:设置导航条上内容(左边,右边,中间). <br>TabBarItem: 设置tabBar上按钮内容(tabBarButton)

导航控制器滑动的失效分析以及解决,经打印发现代理做了别的事情,就先清除的了代理,

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.interactivePopGestureRecognizer.delegate =nil;
}//清除之后,发现会出现假死状态,再次判断只有非根控制下才能有效
#pragma UIGestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{return  self.childViewControllers.count>1;
}

导航控制器实现全屏滑动返回

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];[self.view addGestureRecognizer:pan];//控制手势什么时候触发,只有在非根控制器的时候才触发pan.delegate = self;//禁止之前手势self.interactivePopGestureRecognizer.enabled = NO;}#pragma UIGestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{return  self.childViewControllers.count>1;
}

UITableView 的复用(由Xib 加载 Cell)

//首先进行注册[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([TLYSubTagViewCell class]) bundle:nil] forCellReuseIdentifier:ID];//拿出来可以直接使用TLYSubTagViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

设置图片为圆角

self.imaView.layer.cornerRadius = 30;//30为图片的一半  设置为圆角
self.imaView.layer.masksToBounds = YES;//把多余的进行裁剪

设置UITableView 分割先全屏

//清空tabview的的间隙self.tableView.separatorInset = UIEdgeInsetsZero;
//清空cell自身的间隙cell.separatorInset = UIEdgeInsetsZero;

设置UITableView分割线的第二种方法思路:<br>前提要理解的是tableview的frame是先计算出来后,然后才调用了cellForRowAtIndexPath,做法是:首先将系统默认的分割线设置为none,将整个tableview的背景颜色设置为分割线颜色,然后重写cell的setframe方法.

//在tableview中写的
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundColor = [UIColor colorWithRed:220/256.0 green:220/256.0 blue:221/256.0 alpha:1];
//重写cell的setframe方法  1表示分割线的高度
-(void)setFrame:(CGRect)frame
{frame.size.height-=1;[super setFrame:frame];
}

修改UITextField的光标颜色,和占位字颜色

-(void)awakeFromNib
{[super awakeFromNib];//设置光标的颜色self.tintColor = [UIColor whiteColor];//监听编辑开始和结束[self addTarget:self action:@selector(touchBegin) forControlEvents:UIControlEventEditingDidBegin];[self addTarget:self action:@selector(touchEnd) forControlEvents:UIControlEventEditingDidEnd];//第一种方法NSMutableDictionary *dict =[NSMutableDictionary dictionary];dict[NSForegroundColorAttributeName] = [UIColor lightGrayColor];self.attributedPlaceholder = [[NSAttributedString alloc]initWithString:self.placeholder attributes:dict];//第二种方法,也可以直接利用kvc的方式拿到placeholder的lableUILabel *placeHolder = [self valueForKey:@"_placeholderLabel"];[placeHolder setTextColor:[UIColor lightGrayColor]];
}//开始编辑 (第一种方法)
-(void)touchBegin{NSMutableDictionary *dict =[NSMutableDictionary dictionary];dict[NSForegroundColorAttributeName] = [UIColor whiteColor];self.attributedPlaceholder = [[NSAttributedString alloc]initWithString:self.placeholder attributes:dict];
}///结束编辑(第一种方法)
-(void)touchEnd{NSMutableDictionary *dict =[NSMutableDictionary dictionary];dict[NSForegroundColorAttributeName] = [UIColor lightGrayColor];self.attributedPlaceholder = [[NSAttributedString alloc]initWithString:self.placeholder attributes:dict];
}

如果先设置颜色,placeHolderLable是nil的,为了防止这种情况,尽量先保存颜色,利用runtime给系统增加一个属性,在设置占位文字的时候,同时把颜色设置上

+(void)load
{//方法进行交换   到时候直接调用setPlaceholder 即可直接设置颜色Method m1 = class_getInstanceMethod(self, @selector(setPlaceholder:));Method m2 = class_getInstanceMethod(self, @selector(setTly_PlaceHolder:));method_exchangeImplementations(m1, m2);}-(void)setPlaceHolderColor:(UIColor *)placeHolderColor
{UILabel *placeHolder = [self valueForKey:@"_placeholderLabel"];[placeHolder setTextColor:placeHolderColor];//如果先设置颜色,placeHolderLable是nil的,为了防止这种情况,尽量先保存颜色,利用runtime给系统增加一个属性,在设置占位文字的时候,同时把颜色设置上objc_setAssociatedObject(self, @"placeHolderColor", placeHolderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(void)setTly_PlaceHolder:(NSString *)placeHolder
{[self setTly_PlaceHolder:placeHolder];self.placeHolderColor=self.placeHolderColor;}-(UIColor *)placeHolderColor
{return objc_getAssociatedObject(self.placeholder, @"placeHolderColor");
}

// 处理cell间距,默认tableView分组样式,有额外头部和尾部间距

self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 10;
self.tableView.contentInset = UIEdgeInsetsMake(-25, 0, 0, 0);

获取整个文件夹或者文件大小

-(void)getFileSize:(NSString *)directoryPath
{// NSFileManager// attributesOfItemAtPath:指定文件路径,就能获取文件属性// 把所有文件尺寸加起来///获取文件管理者NSFileManager *manager =[NSFileManager defaultManager];//获取文件夹下所有的子路径NSArray *arrays = [manager subpathsAtPath:directoryPath];NSInteger totalSize =0;//进行遍历for (NSString *path in arrays) {//拼接 获取全路径NSString *subPath = [directoryPath stringByAppendingPathComponent:path];if([subPath containsString:@".DS"])continue;//忽略隐藏文件//是否是文件夹BOOL isDirectory ;//判断文件是否存在BOOL isExists = [manager fileExistsAtPath:subPath isDirectory:&isDirectory];if(!isExists || isDirectory)continue;//获取文件的大小NSDictionary *attr =  [manager attributesOfItemAtPath:subPath error:nil];NSInteger filesize = [attr fileSize];totalSize+=filesize;}NSString *sizeStr = @"当前大小";// MB KB Bif (totalSize > 1000 * 1000) {// MBCGFloat sizeF = totalSize / 1000.0 / 1000.0;sizeStr = [NSString stringWithFormat:@"%@(%.1fMB)",sizeStr,sizeF];} else if (totalSize > 1000) {// KBCGFloat sizeF = totalSize / 1000.0;sizeStr = [NSString stringWithFormat:@"%@(%.1fKB)",sizeStr,sizeF];} else if (totalSize > 0) {// BsizeStr = [NSString stringWithFormat:@"%@(%.ldB)",sizeStr,totalSize];}NSLog(@"%@",sizeStr);}

如果ScrollView 在导航控制器中,ScrollView内部的所有自控制器会自动向下移动64(ScrollView的内边距会自动向下64)

//不允许自动修改UIScrollView的内边距self.automaticallyAdjustsScrollViewInsets=NO;scrollView.contentSize=CGSizeMake(80, 0);//表示可以左右滑动,0表示上下不可以滑动,一般情况里面嵌套UItabview这样设置,只保证里面的UITabview滑动就可以了

如果设置背景色为透明的,尽量不要设置alpha,防止所有子控件透明,尽量设置backgroundColor.

NS_DESIGNATED_INITIALIZER 表示OC中特定方法,若要覆盖此方法,必须添加调用父类方法.不然会报如下警告

Designated initializer missing a 'super' call to a designated initializer of the super class
//举例
-(instancetype)initWithFrame:(CGRect)frame
{if(self == [super initWithFrame:frame]){}return self;
}

计算文字的高度

    //ScreenW 表示屏幕的宽度 表示最大高度 CGFloat height = [topic.text boundingRectWithSize:CGSizeMake(ScreenW-20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17.0]} context:nil].size.height;

heightForRowAtIndexPath的调用频率<br>

  1. 每次刷新表格的时候会调用<br>
  2. 每当cell进入屏幕范围内的时候,会再次调用

总结说明:如果在heightForRowAtIndexPath中计算高度,会非常的消耗性能,可以尝试设置一个估算的高度或者计算完高度进行保存.<br>

self.tableView.estimatedRowHeight =200;

使用估算高度(estimatedRowHeight)的优缺点<br> 优点: 1 可以降低heightForRowAtIndexPath方法的调用频率 2 将计算cell高度的操作延迟执行了(相当于cell高度的计算是懒加载的,只有用到了才执行)<br> 缺点: 1.由于是估算的,所以滚动条可能不准确,会造成跳动(如果不设置估算高度会好很多)

转载于:https://my.oschina.net/u/556624/blog/817026

百思不得其姐学习笔记相关推荐

  1. MySQL基础 (SQLyog)尚硅谷婷姐 学习笔记整理

    MySQL基础 1.0 本节主要学习内容 DB.DBMS.SQL 定义 DB分类.DBMS 特点 服务器的登录与退出 MySQL常见命令 SQL语言分类 SQLyog 一. DB.DBMS.SQL D ...

  2. [记录学习]自学动力节点荣姐SpringMVC5笔记

    首先感谢动力节点和老师的教学分享!Respect! 学习视频来源: B站: https://www.bilibili.com/video/BV1oP4y1K7QT/?spm_id_from=333.1 ...

  3. 《软件测试实践--测试Web MSN》 之我的学习笔记(一)

    开篇话: 对于软件测试,对于一名大三的学生来说,我了解的确实不多,也很不全面,可以说是从学长学姐得到一些有些以偏概全的观点: 比如: 1.测试比开发要求的技术门槛要低,简单地来说,测试人员只需要轻点鼠 ...

  4. 台大李宏毅Machine Learning 2017Fall学习笔记 (14)Unsupervised Learning:Linear Dimension Reduction

    台大李宏毅Machine Learning 2017Fall学习笔记 (14)Unsupervised Learning:Linear Dimension Reduction 本博客整理自: http ...

  5. 【学习笔记】kaggle案例之泰坦尼克号(基于R)

    kaggle案例之泰坦尼克号(基于R) 泰坦尼克号案例 数据预处理 决策树模型建立 泰坦尼克号案例 泰坦尼克号数据集为1912年泰坦尼克号撞击冰山沉没事件中一些乘客和船员的个人信息及是否幸存的状况.可 ...

  6. 《JavaScript学习笔记》

    JavaScript编程语言 1.1.编程 编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机程序:就是计算机所执行的一系列的指令集和,而程序都是用我们 ...

  7. > 《物联网技术与应用》课程学习笔记

    <物联网技术与应用>课程学习笔记 文章目录 前言 第一次课 1.什么是物联网 2.物联网的特征 3.解释NB-IOT(窄带宽中束物联网)的含义 4.解释RFID有源.无源的含义 ~~5.物 ...

  8. Word2vec原理+实战学习笔记(二)

    来源:投稿 作者:阿克西 编辑:学姐 前篇:Word2vec原理+实战学习笔记(一)​​​​​​​ 视频链接:https://ai.deepshare.net/detail/p_5ee62f90022 ...

  9. JavaWeb学习笔记(5)-B站尚硅谷

    文章目录 十四.书城项目第三阶段--优化 (1)页面jsp动态化 (2)抽取页面中相同的内容 A.登录成功的菜单 B.base.css.jQuery标签 C.每个页面的页脚 D.manager模块的菜 ...

  10. 深度学习(二十九)Batch Normalization 学习笔记

    Batch Normalization 学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce 一.背景意义 ...

最新文章

  1. python新建excel表格-python xlwd对excel(表格)写入详解
  2. HarmonyOS之AI能力·助手类意图识别
  3. (ZZ)A*算法入门
  4. java invokelater 以及invokeandwait
  5. OSI七层模型与TCP/IP五层模型
  6. 典型ARM嵌入式Linux设备启动流程-S3C2440,S5PV210,AM3352x
  7. 对赌协议里,隐藏了多少致命陷阱
  8. Scikit-Learn入门教程
  9. 马云5年实现“无现金社会”,必须迈过这几道坎?
  10. XMUTOJ-默罕默德的炸弹
  11. ERP系统常用SQL集锦(转, 一个网友写的,感觉有点虎头蛇尾,不过还是有价值参考)...
  12. SAN存储和服务器虚拟化安装方案,如何部署SAN
  13. Myeclipse安装lombok
  14. 华为云首次突发大面积故障,网友哀嚎一片
  15. 沧海一粟 之 杏花村
  16. 4.15 每周作业 —— 简单DP
  17. 离散数学-趣味题之一
  18. From Image to Imuge: Immunized Image Generation
  19. 软件前沿:泛基因组学映射工具Giraffe
  20. 世纪华通回复深交所问询函:盛大游戏310亿估值合理 明日复牌

热门文章

  1. 【已解决】mysql报错error Found option without preceding group in config file Dmysql-5.7.25-win32
  2. PS教程:用Photoshop创建唯美月夜…
  3. 计算机服务中无spool,print spool自动关闭,print spooler
  4. NAS存储文件权限的设置方法
  5. 互联网变迁-真实化信息的转移
  6. burp的安装和配置
  7. 加速进化,浪潮存储正在梦想成真
  8. 电子邮箱号码大全,至尊邮为你打开邮箱的正确格式
  9. 南方科技大学郑浩计算机,南方科技大学2017年广东综合评价入选资格考生名单(4)...
  10. C语言四分位数Quartile算法(附完整源码)