一句话笔记(33)

一句话笔记,某段时间内遇到或看到的某个可记录的点

  • AppStore 包些许点
  • 键盘只输入数字和小数点
  • navigationBarHidden 影响到 automaticallyAdjustsScrollViewInsets

一、 AppStore 包些许点

  • 1、TestFlight 注意一定要先跑一遍的

  • 2、iOS 的包为啥会比安卓大

    • iOS 自己做了加密优化,这一块很占内存

    • iOS 包含了多套的UI图 和 高清的资源文件 (15MB - 5MB)

      安卓的应用安装后只提取程序的执行文件,程序的图片,数据,都还在压缩的安装包内,每次启动,都要从安装包内再解压提取资源文件,因此占用空间小,毕竟都压缩了。

      而苹果的 iOS 每次下载完 ipa 安装包,则是直接把执行文件和数据,资源等一起解压到程序目录,同时 iOS 还要匹配不同分辨率的设备,所以占用空间自然偏较大。

    • 就是安卓把软件压缩了,节省空间,但相对较慢,苹果都解压了,占用空间,但相对较快。

同时也可以举例微信QQ,分别再安卓和 iOS 上的大小差异。

二、键盘只输入数字和小数点

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSScanner *scanner = [NSScanner scannerWithString:string];
    NSCharacterSet *numbers;
    NSRange pointRange = [textField.text rangeOfString:@"."];
    if ((pointRange.length > 0) && (pointRange.location < range.location  || pointRange.location > range.location + range.length)){
        numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    } else {
        numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
    }
    
    if ([textField.text isEqualToString:@""] && [string isEqualToString:@"."]){
        return NO;
    }
    
    NSInteger remain = 4; //默认保留4位小数
    NSString *tempStr = [textField.text stringByAppendingString:string];
    NSUInteger strlen = [tempStr length];
    if(pointRange.length > 0 && pointRange.location > 0){
        //判断输入框内是否含有“.”。
        if([string isEqualToString:@"."]){
            //当输入框内已经含有“.”时,如果再输入“.”则被视为无效。
            return NO;
        }
        if(strlen > 0 && (strlen - pointRange.location) > remain + 1){
            //当输入框内已经含有“.”,当字符串长度减去小数点前面的字符串长度大于需要要保留的小数点位数,则视当次输入无效。
            return NO;
        }
    }
    NSRange zeroRange = [textField.text rangeOfString:@"0"];
    if(zeroRange.length == 1 && zeroRange.location == 0) { //判断输入框第一个字符是否为“0”
        if(![string isEqualToString:@"0"] && ![string isEqualToString:@"."] && [textField.text length] == 1){ //当输入框只有一个字符并且字符为“0”时,再输入不为“0”或者“.”的字符时,则将此输入替换输入框的这唯一字符。
            textField.text = string;
            return NO;
        }else{
            if(pointRange.length == 0 && pointRange.location > 0){ //当输入框第一个字符为“0”时,并且没有“.”字符时,如果当此输入的字符为“0”,则视当此输入无效。
                if([string isEqualToString:@"0"]){
                    return NO;
                }
            }
        }
    }
    
    NSString *buffer;
    if (![scanner scanCharactersFromSet:numbers intoString:&buffer] && ([string length] != 0)){
        // 只允许输入数字和“.”
        return NO;
    }
    return YES;
}

  • 源自 iOS UITextField 只能输入数字和小数点,只能有两位小数

三、navigationBarHidden 影响到 automaticallyAdjustsScrollViewInsets

此处需要注意的是就是 iOS 10 和 iOS 11 上的差异性

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.navigationController.navigationBar.hidden = YES;
}

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.navigationController.navigationBar.hidden = YES;
    //添加代码 适配iOS11 scrollView下移问题
    if (@available(iOS 11.0, *)) {
        _scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    } else {
        self.automaticallyAdjustsScrollViewInsets = NO;
    }
}

你可能感兴趣的:(一句话笔记(33))