iOS 小知识

作者: 远方的枫叶 | 来源:发表于2016-05-22 11:10 被阅读167次

    原文https://slpowercoder.github.io/

    1、去掉按钮的高亮黑

    [funcImgBtn setAdjustsImageWhenHighlighted:NO];
    

    2、设置视图属性防止背景图片变形
    关于UIViewContentMode的详解
    http://blog.csdn.net/iunion/article/details/7494511

    //对于UIButton需要设置button中的imageView的contentMode属性
    button.imageView.contentMode = UIViewContentModeScaleAspectFill;
    //
    视图.contentMode = UIViewContentModeScaleAspectFill;
    视图.clipsToBounds = YES;
    

    3、当一个页面有多个scrollView(或继承自scrollVIew)的时候,点击状态栏不会回到顶部,可以将非当前显示页的scrollVIew. scrollToTop设置为NO。
    4、去掉在UITableViewStylePlain 样式的时候多余的默认cell

    _tableView.tableFooterView = [[UIView alloc]init];
    

    5、去掉在UITableViewStyleGrouped 样式的时候默认的组脚高度

    -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
        return 0.001; //越小越好,不能设置为0
    }
    

    6、自定义导航栏的返回按钮而造成返回手势的失效的解决办法,对于最顶层的VC我们需要设置enabled = NO,因为最外面一层是不需要该手势的

    self.navigationController.interactivePopGestureRecognizer.delegate = self;
    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    

    7、根据十六进制色值返回一个UIColor对象的宏

    #define USERCOLOR(string) [UIColor colorWithRed:((float)((string & 0xFF0000) >> 16))/255.0 green:((float)((string & 0xFF00) >> 8))/255.0 blue:((float)(string & 0xFF))/255.0 alpha:1.0]
    

    8、控制屏幕是否锁屏

    //值为yes的时候可以防止屏幕黑屏,注意在程序结束点时候要设置为no
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
    

    9、防止自定义导航栏返回按钮时,返回手势失效

    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    

    10、打印函数,可以打印所在的函数,行数,以及你要打印的值

    #define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
    

    11、 UISwitch的大小直接设置frame是没有用的,可以通过CGAffineTransformMakeScale缩放来设置

    12、 load和initialize

    //程序在加载类文件时候会调用load,无论实现该方法的类有没有被引用(只要程序运行的时候就会加载该类文件)
    +(void)load
    //在类被初始化之前会调用一次
    +(void)initialize
    

    13、iPad使用UIAlertController会crash
    http://stackoverflow.com/questions/31577140/uialertcontroller-is-crashed-ipad
    14、GCD的一个用处是可以让程序在后台较长久的运行。在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作,让程序在后台长久运行的示例代码如下:

    // AppDelegate.h文件
    @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;
    
    // AppDelegate.m文件
    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        [self beingBackgroundUpdateTask];
        // 在这里加上你需要长久运行的代码
        [self endBackgroundUpdateTask];
    }
    
    - (void)beingBackgroundUpdateTask
    {
        self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
            [self endBackgroundUpdateTask];
        }];
    }
    
    - (void)endBackgroundUpdateTask
    {
        [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
        self.backgroundUpdateTask = UIBackgroundTaskInvalid;
    }
    

    15、 推荐一个国外大大利用消息转发避免后台返回NSNull(后台有时候会返回<null>)而引起的奔溃问题,例如你需要一个字符串他却给你返回了一个“<null>”这样一个NSNull对象,对于少量数据有时候我们会用plist或归档来做缓存,然后后台返回NSNull对象会导致利用plist做缓存失败,plist不支持NSNull类型,你可以用数据库或者归档做缓存。用法很简单,直接把NullSafe.m拖到项目中即可,该文件会在运行时自动加载,该法利用了消息转发机制

    相关文章

      网友评论

      本文标题:iOS 小知识

      本文链接:https://www.haomeiwen.com/subject/cmvorttx.html