工作中遇到的问题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