1、naigateBar是否透明的设置
navigationController.navigationBar.translucent = YES
2、获取类的类名
NSLog(@"class name>> %@",NSStringFromClass([self class]));
3、调试窗口中输出变量
print (type) 变量名。框架中的变量名,最好使用[]语法获取,而不是.语法获取,比如输出button的frame大小,方法如下
UIButton* btn;
print (CGRect) [self.btn frame]
po 对象
4、TableView中加载Xib
static NSString* identfy = @"ClockViewCell";
static BOOL bReg = FALSE;
if (bReg == FALSE) {
[tableView registerNib:[UINib nibWithNibName:@"ClockCell" bundle:nil] forCellReuseIdentifier:identfy ];
bReg = TRUE;
}
ClockCell* pCell = [tableView dequeueReusableCellWithIdentifier:identfy];
if (pCell == nil) {
pCell = [[ClockCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identfy];
}
5、TableView中删除某一行会崩溃可能原因
/
//TableView中Cell的个数是和数据关联的,删除某一行,需要先从数据中删除对应的数据。
<span class="s1">self</span><span class="s2">.</span><span class="s3">mClockInfoArray</span><span class="s2"> </span><span class="s4">removeObjectAtIndex</span><span class="s2">:nIndex]</span>
[self.mClockTableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationTop]
在XIB文件中放置好控件之后,如果启用了AutoLayout,则需要在IB中,定义好控件的宽高,以及约束。并且就不要在代码中设置frame了。因为即使设置了frame,
也会在可能不知情的情况下被改掉,导致展现和预期不一致。所以如果希望采用在viewwillLayoutSubviews的响应中,通过代码去排版控件位置,就需要把AutoLayout关掉
6、IOS7以上,ScrollView的顶部会被自动留出一些空白区域,这是为了适应全屏幕,View可以在NavigateBar下也模糊显示。要关掉这个留白
*这个属性是UIViewController的。所以只要用到了UIScrollView,需要自己管理位置,不管是在什么ViewController中,都记得把这个变量设为FALSE。否则自己设置的
scrollview的现实内容,会与实际的不符。
self.automaticallyAdjustsScrollViewInsets = false;
7、调整已由UIImage的尺寸
#pragma mark 裁剪照片
-(UIImage *)scaleToSize:(UIImage *)image size:(CGSize)size
{
//创建一个bitmap的context
//并把他设置成当前的context
UIGraphicsBeginImageContext(size);
//绘制图片的大小
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
//从当前context中创建一个改变大小后的图片
UIImage *endImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return endImage;
}
8、函数的参数是block类型的语法。例:
-(void ) setCallback: (void (^)(BOOL b)) callback;
或者
typedef void (^UpdateCallback)(BOOL b);
-(void) setCallback: (UpdateCallback) call;
9、使用masonry设置constraint时,如果父view是UIView,那么像make.edges.equalTo(superview)是ok的。但是如果父view是scrollview时,会有问题。
masonry调整的子view大小不对,这时宽度约束可以换成make.width.equalTo(_mainScrollView),并且设置bottom,让masonry知道scrollview的真实高度
make.bottom.equalTo(_mainScrollView.mas_bottom);
参考这个issue:https://github.com/SnapKit/Masonry/issues/25
10、NSSearchPathForDirectoriesInDomainsapi中的第三个参数BOOL expandTilde 含义为是否展开路径
FALSE: ~/Documents/info.db
TRUE: /Users/xxx/Library/Developer/CoreSimulator/Devices/95410639-D066-42E1-B249-2F2A0FAC0148/data/Containers/Data/Application/19056263-0BE2-4148-9F16-F1288B8785AA/Documents/info.db
实际使用中应该用展开路径。 否则打开db时会失败。
11、开发中要给tableview增加一个HeaderView。发现如果设置的太早,headerview的高度会计算不正确,导致盖在其他cell的上面。经过多次试验,
发现可以在controller的时机。viewWillLayoutSubviews函数中设置headerview,这时高度可以计算正确,并且保证在tableview展现时,headerview也同时展现。