iOS开发备忘笔记 (2)
2017-02-25 本文已影响47人
hext123
-
不能改优先级为
UILayoutPriorityRequired (1000)
的约束 -
在
heightForRowAtIndexPath
没有被正确测量cell
的高度时,cellForRowAtIndexPath
可能会被不必要的调用,即不可见的cell
也会被调用。如果正好数据量很大,会导致性呢个严重下降。 -
present出一个背景可透明的
viewController
if (IOS_VERSION >= 8.0) { vc.modalPresentationStyle = UIModalPresentationOverCurrentContext; }else{ self.modalPresentationStyle = UIModalPresentationOverFullScreen; } vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [self presentViewController:vc animated:YES completion:nil];
-
NSUInteger
无符号整数的-1
是一个很大的数值 在与NSInteger
做比较时应注意。例:
NSInteger a = 5; NSUInteger b = -1;
比较a<b
成立。
输出
Arr.count
是无符号的(NSUInteger
),跟-1
(NSInteger
)比较时,会把-1
转成NSUInteger
,然而NSUInteger
不保存负数,-1
符号被截断后溢出变成了一个很大的数利用这个特性,以后判断数组下标是否越界时,不用写:
if(index >= 0 && index < arr.count)
直接写这个就好了,一样的效果:
if(index < arr.count)
-
URL编码:
-
编码URL中的参数部分:
return [str stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
各参数的区别:
输出区别 -
编码整个字符串:
return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)str, NULL, (__bridge CFStringRef)@":/?&=;+!@#$()',*", kCFStringEncodingUTF8);
-
-
把
cell
当sectionHeaderView
用, 需要把cell
放进一个容器里,否则可能导致no index path for table cell being reused
的错误,以及sectionHeaderView
在界面上消失.-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"head"]; //把 cell 放进一个容器里再设置为sectionHeaderView UIView *view = [[UIView alloc] initWithFrame:[cell frame]]; cell.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; [view addSubview:cell]; return view; }
-
可以利用
tableView.backgroundView
来做空列表提示等功能 -
给静态
tableView
的rightDetail
风格的cell
上的detailText
赋值时, 遇到的一些问题:-
detailText
赋值text
为@""
或者nil
之后,此控件会消失看不见,再赋值也不会出来. -
detailText
赋值attributedText
后, 控件大小(宽)没有跟着变.
解决办法: 赋值后刷新
tableView
或cell
-