• 『IOS』 遇到问题记录(长期更新)


    遇到的很多问题,解决后都是自己记着,以为不会忘记,之后却会想不起来了。

    所以把今后解决的问题记录在这。

    一.

    在二级页面设置了CAlayer的代理,在返回一级页面报错:

    EXC_BAD_ACCESS(code=EXC_I386_GPFLT)  :野指针,访问了一块不属于你的内存

    因此delegate需要显示的释放      (释放顺序从外层到里层)

    -(void)dealloc{ 

    {
        layer.delegate = nil;//都得写在父类方法调用前

      //[super dealloc]; //ARC下 不需要调用父类方法,系统默认自动调用
    }

    二.

    枚举值 与 字符串 相互转换

    看来只能写一个方法来转换,里面判断枚举值,返回相应的字符串  

    三. NSString转换NSURL失败

    NSString转换为NSURL 

    如果字符串里面有换行   会导致转换失败  返回nil

    例如:

    http://somewebsite.com?orderPassportId=31327458&freeAirRuleInfos1=SHA,DLCSHA,SHAHAK,FOCSHA,SHAZUH,SHASWA,CSXSHA,SHAWNZ,SHANNG,INCXIY,SHAKWL,KHNSHA,XIYXNN,SHALHW,UYNXIY

    __HKLNR_1_2-24_50__FASTLINE_0&flightFreeCode=FASTLINE&tripType=1&departDate=20170518&oriDepartDate=20170518&flightNo=MU5189

    四.prefix header等路径

    $(SRCROOT)/MyPrefixHeader.pch

    $(SRCROOT) 根目录

    $(PROJECT_DIR)  项目路径      

    其实不需要了解太多   输入完成后都会显示实际的路径  只要匹配就好

    五. NavigationBar透明度

    UINavigationController  

    navigationBar.translucent属性控制导航栏的半透明效果  

    设置的背景图片跟随此属性半透明效果

    translucent=YES,半透明,self.view.origin.y = 0;

    translucent=NO, 不透明,seld.view.origin.y = 

    self.navigationController.navigationBar.frame.size.height;

    六.ScrollView内部存在偏移

    高度: NavigationBar导航栏 44.    StatusBar 状态栏 20.    标签栏Tabbar49.

    当status bar, search bar, navigation bar, toolbar, or tab bar.等存在的时候

    控制器属性automaticallyAdjustsScrollViewInsets默认为YES,此时如果

    视图控制器VC的第一个子视图 或者 子视图的第一个子视图(可一层层下去) 是 UIScrollView或其子类,就会出现偏移

    可以理解为 会根据Bar自动设置scrollview.contentInset属性。    

    现在我需要实现简单的效果

    仅存在一个子视图ScrollView,内部有一张只能够左右滑动,不能上下滑动的图片。(contentSize.height <= image.height)

    1.当只有状态栏时, sv内上方多了20个像素,且上下居然可以滑动。 contentInset.top=20

       将automaticallyAdjustsScrollViewInsets = NO  正常

    2.在有状态栏、导航栏的情况下  

        ①. navigationBar默认为半透明的(translucent=YES)    sv内上方多了20+44个像素   contentInset.top=64 

        设置automaticallyAdjustsScrollViewInsets = NO  正常

        ②. 如果navigationBar是不透明的(translucent=NO)  automaticallyAdjustsScrollViewInsets无论YES还是NO 都是正常的

    因此为了消除偏移,可以设置vc.automaticallyAdjustsScrollViewInsets = NO;

    七. 存在转义字符的字符串如何恢复

    NSString *string = @"1.为保障行程单邮寄的时效性,目前统一使用邮政EMS快递进行寄送。&lt;br&gt;2.请您完整填写收件地址、邮政编码及联系方式,如因信息错误、不全造成无法投递,东航概不承担责任,邮寄费用不退。";
    __unused NSString * A = [[NSAttributedString alloc] initWithData:[string dataUsingEncoding:NSUTF8StringEncoding]
                                                                 options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute:@(NSUTF8StringEncoding)}
                                                                documentAttributes:nil error:nil].string;
    //输出结果: 1.为保障行程单邮寄的时效性,目前统一使用邮政EMS快递进行寄送。<br>2.请您完整填写收件地址、邮政编码及联系方式,如因信息错误、不全造成无法投递,东航概不承担责任,邮寄费用不退。

    八. 检测在非主线程里更改UI

    使用:PSPDFUIKitMainThreadGuard.m

    http://files.cnblogs.com/files/yffswyf/PSPDFUIKitMainThreadGuard.zip     下载后将.zip改为.m

    不需要做任何处理  只需要将该.m文件添加到项目中就行

    九、UITextField 添加事件:UIControlEventEditingChanged 检测输入变化 而不是 UIControlEventValueChanged

    十、使用Masonry对可换行 UILabel 布局,无需手动计算文本高度

      lbNotice.preferredMaxLayoutWidth = SCREEN_WIDTH - 20 * 2;  //最大宽度

      [lbNotice setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

      lbNotice.numberOfLines = 0;

       [lbNotice mas_makeConstraints:^(MASConstraintMaker *make) {

        make.top.bottom.mas_equalTo(self);

        make.left.mas_equalTo(self).offset(-20);

      }];

    十一.

    AFNetworking 3.0:

          设置并发数:有问题

      AFHTTPSessionManager *sessionManager.operationQueue.maxConcurrentOperationCount = 3;

       正确方式: 设置NSURLSessionConfiguration的属性HTTPMaximumConnectionsPerHost

      NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];

           config.HTTPMaximumConnectionsPerHost = 3;

           AFHTTPSessionManager.sessionManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];

    详情见:AFNetworking/issues/3720

    十二.

    Quartz2D的绘制时,如果挨着边上画会出现抗锯齿机制

    比如使用bezierPathWithRoundedRect: cornerRadius: 画圆角矩形

    可以将边上的先往里收一点

    十三.

    Base58正则表达式判断    A-Z、a-z、0-9中,去除

    0(数字0)、O(o的大写字母)、l( L的小写字母)、I(i的大写字母)

    ^[A-HJ-NP-Za-km-z1-9]+$

    十四.

    自动布局中,TableViewHeader中 加载网络图,给定一个占位图,之后每次通过sd_setImageWithURL:修改图片的实际尺寸。

    会导致图片错位。然而重新进入页面又变成正常的了(图片已缓存)。   所以需要每次下载完成后reloadData;

    另一个问题是,在UITableView reload的时候,如果实际高度大于estimatedRowHeight,会发生移位。

    十五.

     iOS >= 12.2 UIWebview 中视频 用户点击无法播放

    设置 webView.mediaPlaybackRequiresUserAction = NO;

    十六.

     iOS < 11,部分cell固定高度,部分自适应。

    同时需要实现以下代理,自动布局才正常。

    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath; 

  • 相关阅读:
    maven项目打ZIP包
    springBoot文档地址
    延迟队列DelayQueue
    图片处理依赖
    java模板引擎替换代码
    redisson笔记
    linux 自动备份脚本
    shell 远程备份日志
    amqp事务
    redis 事务
  • 原文地址:https://www.cnblogs.com/yffswyf/p/6731733.html
Copyright © 2020-2023  润新知