IOS开发点滴

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也同时展现。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值