最近看到的需要整理的内容(2)

工作中遇到的问题2

***.h file not found

进入Build Settings -> Search Paths 更改路径

cell自动计算高度

1、用约束进行约束自动计算之后,可能会有约束警告,这样的话,在我们拖动tableView的时候不停的进行刷新,会有闪烁卡顿的情况。
2、这时我们应该取消底部约束,利用最底部的view的最大y值来进行计算,赋值之后,将高度返回给tableView,利用代理方法为tableViewcell设置高度。
3、这样就不会有约束警告问题了,属于设置技巧。

Masonry 约束优先级的问题

    - Content Hugging Priority: 该优先级表示一个控件抗被拉伸的优先级。优先级越高,越不容易被拉伸,默认是250。
     - Content Compression Resistance Priority: 该优先级和上面那个优先级相对应,表示一个控件抗压缩的优先级。优先级越高,越不容易被压缩,默认是750


切换表情键盘

    /**
    切换表情键盘
    */
    func inputEmoticon()
    {
        print(#function)
        // 结论: 如果是系统自带的键盘, 那么inputView = nil
        //      如果不是系统自带的键盘, 那么inputView != nil
//        print(textView.inputView)

        // 1.关闭键盘
        textView.resignFirstResponder()

        // 2.设置inputView
        textView.inputView = (textView.inputView == nil) ? emoticonVC.view : nil

        // 3.从新召唤出键盘
        textView.becomeFirstResponder()
    }

==与isEqual的区别

==运算符只是简单地判断是否是同一个对象,即对象的地址是否相等 ,而isEqual方法可以判断对象是否相同, 例如UIColor对象表示的color是否相同

cell点击展开关闭动画效果

1、
    模型修改cell的高度,调用方法
         [tableView beginUpdates];
         [tableView endUpdates];
2、
可以在点击时加入
///显示
        NSMutableArray *indexPaths = [NSMutableArray array];
        for (int i = 0; i < model.students.count; i++) {

            [indexPaths addObject:[NSIndexPath indexPathForItem:i inSection:section]];
        }
        [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];

/// 删除
        [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];

pop动画必设属性设置

/*基础动画*/
POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha];
anim.fromValue = @(0.0);
anim.toValue = @(1.0);
[view pop_addAnimation:anim forKey:@"fade"];

/*弹性动画*/
POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];
anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 400, 400)];
[layer pop_addAnimation:anim forKey:@"size"];

            【弹性动画相关属性设置】
springBounciness:4.0    //[0-20] 弹力 越大则震动幅度越大
springSpeed     :12.0   //[0-20] 速度 越大则动画结束越快
dynamicsTension :0      //拉力  接下来这三个都跟物理力学模拟相关 数值调整起来也很费时 没事不建议使用哈
dynamicsFriction:0      //摩擦 同上
dynamicsMass    :0      //质量 同上
【注意:POPSpringAnimation是没有duration字段的 其动画持续时间由以上几个参数决定】


/*衰减动画*/
POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];
anim.velocity = @(1000.);
[layer pop_addAnimation:anim forKey:@"slide"];
                【可配置属性】
deceleration:0.998  //衰减系数(越小则衰减得越快)

【注意:这里对POPDecayAnimation设置toValue是没有意义的 会被忽略(因为目的状态是动态计算得到的)
注意:POPDecayAnimation也是没有duration字段的 其动画持续时间由velocity与deceleration决定】 /*自定义动画*/ POPAnimatableProperty *prop = [POPAnimatableProperty propertyWithName:@"prop" initializer:^(POPMutableAnimatableProperty *prop) { // read value prop.readBlock = ^(id obj, CGFloat values[]) { }; // write value prop.writeBlock = ^(id obj, const CGFloat values[]) { }; // dynamics threshold prop.threshold = 0.01; }]; 【其组成就是一个readBlock一个writeBlock和一个threashold readBlock告诉POP当前的属性值 writeBlock中修改变化后的属性值 threashold决定了动画变化间隔的阈值 值越大writeBlock的调用次数越少】

xib创建tableView的Header约束报错

    ///  xib创建tableView的header时需要在外面包裹一层view,否则会报约束错误的问题


UIView *baseHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,SCREEN_WIDTH , 250)];
self.headerView = [[[NSBundle mainBundle]loadNibNamed:@"HAIMineHeaderView" owner:nil options:nil] firstObject];
self.headerView.frame = CGRectMake(0, 0, SCREEN_WIDTH, 250);
[baseHeaderView addSubview:self.headerView];
self.tableView.tableHeaderView = baseHeaderView;

tabbar设置item时,排版问题。

有title的会被排放在最后面,没有title的会被放到前面,注意一下,应该设置self.navigationItem.title

Autolayout对多行文本Label进行布局,高度不准确的解决办法

如果是计算多行UILabel,并且width不是固定的话(自动布局适配屏幕就是不固定,写死的数值算固定),需要设置label的preferredMaxLayoutWidth属性,否则计算的结果会有偏差!

textView自动计算高度

textView的scrollEnable属性设置为NO,这样的话,textView的高度约束>=120,这样就会进行自动计算了.

collectionView流水布局flow,item等宽,间距相等

需要设置contentInset左右间距和margin相等

物理仿真器 UIDynamicAnimator

  • https://github.com/kSimpleCoder/OFOMinionsEyesView
  • https://github.com/LeeYouth/UIDynamicDemo

金钱金额不用float和double

  • 精确度问题,不使用float和double,*/ 都会改变精度

聊天或者评论界面的布局设计

    1.tableview 顶部约束为0 ,评论框 与tableView 四周约束为0 ,这时,当键盘弹起的时候 tableView的视图不会产生变化,会有tableView的cell被键盘挡住的现象
    2.tableView 顶部约束不设置,设置tableView的高度 = 屏幕高度- 键盘工具栏的高度.这时,当键盘弹起的时候 tableView的视图会从当前cell 处向上弹起,不会又被键盘挡住的现象,可是当tableview中的数据较少时,会有整体向上移动,导致数据也向上移动的情况.

IQKeyboardManager

1:IQKeyboardManager在需要解决键盘遮挡时会去递归找可滚动的父视图进行偏移,如果没有就对window的frame做文章
2:核心方法是adjustFrame,通过它解决键盘遮挡

tableView下拉,头像放大

原理很简单,就是在UITableview上边添加一个图片子视图,在tableview拖动的时候动态的改变图片的frame,就可以实现这个效果。

Swift和OC混编

1.创建桥接文件.h
    .h文件名:  项目名-Bridging-Header.h
    里面的内容:  #import 
2.Build Settings ->  Use Legacy Swift Language Version:把后面的改成YES即可。

3.XCode -> Edit -> Convert -> To Current Swift Syntax...

4.直接导入swift文件  ->  #import 项目名-Swift.h

tableviewCell 左滑多个按钮

1.首先UITableViewDataSource重写这个方法,系统就会自动添加这种操作。
- (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath
2.ios8.0 之后苹果开放了这样一个API:
-(nullable NSArray
*)tableView:(UITableView*)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
返回一个UITableViewRowAction数组,每一个"Action"代表一个侧滑删除的Button。这样侧滑每一行Cell可以有更多按钮提供给用户交互。
- http://www.cocoachina.com/ios/20151118/14243.html

ios 11 之后

    1.NavBar的titleView支持autoLayout
这要求titleView必须是能够自撑开的或实现了- intrinsicContentSize

- (CGSize)intrinsicContentSize {
    return UILayoutFittingExpandedSize;
}
    2.安全区域概念
if (@available(iOS 11.0, *)) {
    self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
    self.automaticallyAdjustsScrollViewInsets = NO;
}
- http://www.jianshu.com/p/efbc8619d56b  iOS 11 安全区域适配总结

    3.大标题
    iOS11导航栏多了一个LargeTitleView,专门显示大字标题用的,整个导航栏的高度达到了96p,比之前的导航栏多了32p,不过,大字标题默认是关闭的,所以一般情况下,导航栏的高度还是64p

你可能感兴趣的:(最近看到的需要整理的内容(2))