在iOS开发过程中你容易忽略掉的细节!!!

                                      

程序猿/媛们为了梦想请奔跑吧!!!

1.子视图超出frame的部分不显示  view.clipsToBounds 设置为YES;   UIScrollview的clipsToBounds默认就是YES

2.UIImage 有一个属性叫size 。  当为对象Image赋值一张图片以后,Image会自动生成一个size。 那么也就是说你可以用image.size.x 来设置其父视图的size。即:

UIImageView *imageView = [[UIImageView alloc]initWithImage:@"text.png"];

这样不用给定frame 系统也可以显示出带图片大小的ImageView。

3.contentOffset 表示UIScrollView滚动的位置。(其实就是内容视图左上角与scrollView显示视图左上角的间距值)

4.UIEdgeInsets    这个属性能够在UIScrollView的四周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住。

5.UIView渐变动画有三种:(UI控件属性被修改)

[UIView animateWithDuration:0.1 animations:^{ //需要动画的内容 self.imageView.frame = CGRectMake(20, 20, 30, 20);//e.g }];

[UIView beginAnimations:nil context:nil];   [UIView setAnimationDuration:2.0f];//修改动画持续时间 //   需要做动画的内容  self.imageView.frame = CGRectMake(20, 20, 30, 20);//e.g[UIView commitAnimations];

[UIView transitionWithView:noteView duration:0.6 // 在noteView视图上设置过渡效果  options:UIViewAnimationOptionTransitionCurlUp  animations:^{  NSString *currentText = noteView.text;      noteView.text = nextText; self.nextText = currentText; }  completion:^(BOOL finished){}];

6.OC语法细节:不允许直接修改OC对象的结构体属性的成员

修改结构体

7.图片缩放不止可以用手势,也可以用ScrollView

利用ScollerView缩放控件


顺便提一句

viewForZoomingInScrollView不仅仅可以缩放图片,只要是继承自UIIView的控件都可以进行缩

8.NSArray  有一个方法让所有对象都执行某个方法

[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

后边的方法可以自定义,也可以用系统的。

当然类似东西都用for - in  了,如果在循环中用的是系统的一些操作、方法。不妨试试上边这个方法。

9.从Xib、Storybord加载控件执行方法顺序

- initWithCoder:aCoder   作用是将xib的控件通过aCoder解析器创建所有子控件,通过IBOutlet 连接的属性在这个方法里边值是null。走了initWithCoder  就不会走initWithFrame。

- awakeFormNib  是将冻结的nib控件唤醒,即所有子控件创建完毕后就会调用这个方法,在这个地方IBOutlet连接的属性才会真正的有值,所以修改nib控件的属性值应该在这个方法或者运行过程之后的方法。

10.为什么 iOS 开发中,控件一般为 weak 而不是 strong?

IBOutlet的属性一般可以设为weak是因为它已经被view引用了,除非view被释放,否则IBOutlet的属性也不会被释放,另外IBOutlet属性的生命周期和view应该是一致的,所以IBOutlet属性一般设为weak。

请你不要在迷茫了!!!

通俗点讲:

因为控件他爹( view.superview )已经揪着它的小辫了( strong reference ),你( viewController )眼瞅着( weak reference )就好了。当然,如果你想在 view 从 superview 里面 remove 掉之后还继续持有的话,还是要用 strong 的( 你也揪着它的小辫, 这样如果他爹松手了它也跑不了 )。

11、用NSLayoutConstrain给控件做了约束以后,如何执行一定的UIView动画呢?

// 高度约束,为了点击方法可以改变  @property (nonatomic, strong) NSLayoutConstraint *heightConstraint;

// 高度约束,为了点击方法可以改变  @property (nonatomic, strong) NSLayoutConstraint *heightConstraint;//在修改了约束以后,只要执行下边的代码,就能做动画效果 [UIView animateWithDuration:2.0 animations:^{        [添加了约束的View    layoutIfNeeded];   }];

12、关于TableView的[- tableView: heightForRowAtIndexPath:]和[ -tableView: cellForRowAtIndexPath:  ]历史版本调用顺序的变迁

iOS  7及之前:

先依次调一遍heightForRow方法再依次调一遍cellForRow方法,在调cellForRow方法的时候并不会再调一次对应的heightForRow方法。如果我们实现了:【-tableView: estimatedHeightForRowAtIndexPath:】给了系统估计高度,那么上述两个方法的执行顺序就会颠倒。并且给定估计高度对于TableView的性能方面也提示不少。

iOS8  :

先依次调heightForRow(如果行数超过屏幕依次调用两次,如果行数很少,没有超过屏幕,只依次调用一次),之后每调一次cellForRow的时候又调一次对应的heightForRow方法。

iOS9和iOS10:

heightForRow方法会先调用三次,然后每调用一次cellForRow的时候再调用一次对应的heightForRow。

iOS 11 :

先row = 0调用一次 cellForRow,然后一次heightForRow.然后再是row =1 ,依次类推。看打印结果


13、LayoutIfNeeded小理解

这个方法和另一个方法配对的,setNeedLayout和layoutIfNeed,还有一个关联的方法是layoutSubviews,在我们没有任何干预的情况下,一个view的fram或bounds发生变化时,系统会设置一个flag给这个view,当下一个渲染时机到来时系统会重新按新的布局来渲染视图。setNeedLayout就是我们主动为这个视图设置一个flag,告诉系统这个视图再下一个时机到来时要重新渲染,而layoutIfNeed则是告诉系统,如果设置了flag那么不用等待时机到来了,直接渲染吧。而layoutSubviews这个方法是系统调用的,我们不需要主动调用,我们只需要调用layoutIfNeed就可以了,让系统判断是否在当前时机下立即渲染。

另同时附上一个场景举个例,当想知道tableView reloadData后的contentSize的话可以在reloadData后用这两个方法,然后就可以直接提取contentSize了。

14、UILabel.preferredMaxLayoutWidth属性

- 设置label每一行文字的最大宽度

这个属性建立在autoLayout布局的label中,如果是非零,那么这个属性用于多行Label的文字固定宽度

15、iOS NSLog去掉时间戳及其他输出样式

加宏定义

#ifdef DEBUG#define NSLog(FORMAT, ...) fprintf(stderr,"%s ",[[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);#else#define NSLog(...)#endif

16、UITableView点击一下就出现灰色但是立马消失掉。

点击那一刻可以指示出点击了哪一行,灰色停留一秒钟消失掉。

//1.设置cell点击时候为灰色cell.selectionStyle = UITableViewCellSelectionStyleGray;//2.在tableView代理方法didSelectedRow方法这样写- (void)tableView:(UITableView *)tableView didSelecteRowAtIndexPath:(NSIndexPath *)indexPath{      [ tableView deselectRowAtIndexPath:indexPath animated:YES];//直接取消选中这一行}

别人不断学习进行提升!而你还在观望和抱怨~emmm···

未完待续— —

要是写的不好请多多评论~   反正我也不改    2333   

谢谢大家支持 !!!

↓ ↓ ↓ 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容