美文网首页
2017.10技术点记录

2017.10技术点记录

作者: 光彩影 | 来源:发表于2017-10-30 21:57 被阅读26次
    1. iOS 11 适配

    1.1. tableview适配

    // tableView 偏移20/64适配
    if (@available(iOS 11.0, *)) {
        self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;//UIScrollView也适用
    }else {
        self.automaticallyAdjustsScrollViewInsets = NO;
    }
    //滚动条高度跳动、上下拉刷新问题:
    self.estimatedRowHeight = 0;//默认是这样设置,能防止上下拉刷新跳动问题,但是如果是xib自动cell,要把这行注释,然后给高度。
    self.tableView.estimatedSectionHeaderHeight = 0;
    self.tableView.estimatedSectionFooterHeight = 0;
    
    // AppDelegate 进行全局设置
        if (@available(iOS 11.0, *)){
            [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
        }
        
    //Warn:webView,scrollview,tableview都有页面偏移问题,所以都要设置.
        
    

    1.2 HUD不显示
    HUD 必须添加在窗口的keyWindow才能显示,ios11在lastWindow在 是无法显示的.

    1.3 搜索栏适配

    在ios11搜索栏 展示效果非常不好,只能重新适配.所以只能抛弃系统的UISearchBar,自己实现了一个搜索控件,由UIView实现,主要是要实现

    -(CGSize)intrinsicContentSize{
    return UILayoutFittingExpandedSize;
    }
    

    在ios11 下搜索框能在titieView下自动扩张.

    1.4 ios11导航栏按钮图片变大

    UIButton *leftCustomButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
    
    [leftCustomButton.widthAnchor constraintEqualToConstant:35].active = YES;
    [leftCustomButton.heightAnchor constraintEqualToConstant:35].active = YES; 
    
    [leftCustomButton setImage:[UIImage imageNamed:@"defaultImage"] forState:UIControlStateNormal];
    UIBarButtonItem * leftButtonItem =[[UIBarButtonItem alloc] initWithCustomView:leftCustomButton];
    self.navigationItem.leftBarButtonItems = @[self.headerIconItem]; 
    

    2.iPhoneX适配

    #define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height
    #define kNavBarHeight 44.0
    #define kTabBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49)
    #define kTopHeight (kStatusBarHeight + kNavBarHeight)
    
    kStatusBarHeight与kTabBarHeight需要更改,还有不要隐藏statusBar.
    

    3.tableview数组越界

    
    判断数组为空时候的越界问题当首次数据没有请求完毕的时候[tableVIew reloadData];就会导致crash这个时候需要做一次判断:
    
    if(self.dataArray.count != 0){
     Model * model = self.dataArray[indexPath.row];
    }
    
    有时候会出现上拉加载更多后点击下拉出现crash 这个时候提示数组越界但是并不是真的越界 因为这个时候的indexpath.row > 数组的元素个数的。所以需要以下处理
    
     if(indexPath.row < self.dataArray.count){
      Model* model = slef.dataArray[indexpath.row];
      }
      
      //即:
      if(self.dataArray.count != 0 && indexPath.row < self.dataArray.count){
     Model * model = self.dataArray[indexPath.row];
    }
    
    //FIXME:这方案不知道对不对,后续改正
    

    4.修改UIAlertView设置文字左对齐
    因为iphoneSDK默认是居中对齐的,而且没有提供方法设置文本对齐接口,在Delegate中:

    - (void)willPresentAlertView:(UIAlertView *)alertView;
    

    获取UIAlertView上面的Message控件,它其实也是一个UILable控件,然后设置其textAlignment的属性即可。

    代码如下:

    - (void)willPresentAlertView:(UIAlertView *)alertView{
        UIView * view = [alertView.subviews objectAtIndex:2];
        if([view isKindOfClass:[UILabel class]]){
            UILabel* label = (UILabel*) view;
            label.textAlignment = UITextAlignmentLeft;
        }
    }
    

    这里要注意的是,Message的UILable在alertView.subviews里面是第3个元素,第一个元素是一个UIImageView(背景),UILable(标题),UILable(Message),UIButton(Cancel)...(如果还有的话以此类推)。

    5.ios后台模式播放(锁屏播放实现)
    音频后台播放,最开始集成是直接用beginReceivingRemoteControlEvents,并在kvo实现了,对应方法.
    但是在ios11无效果. 需要MPRemoteCommandCenter控制后台中心去实现后台控制,MPNowPlayingInfoCenter实现锁屏后的界面展示.
    即相应实现API即可.

    相关文章

      网友评论

          本文标题:2017.10技术点记录

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