工作中遇到的問題2
***.h file not found
進入Build Settings -> Search Paths 更改路徑
cell自動計算高度
1、用約束進行約束自動計算之后,可能會有約束警告,這樣的話,在我們拖動tableView的時候不停的進行刷新,會有閃爍卡頓的情況。
2、這時我們應(yīng)該取消底部約束,利用最底部的view的最大y值來進行計算,賦值之后,將高度返回給tableView,利用代理方法為tableViewcell設(shè)置高度。
3、這樣就不會有約束警告問題了,屬于設(shè)置技巧。
Masonry 約束優(yōu)先級的問題
- Content Hugging Priority: 該優(yōu)先級表示一個控件抗被拉伸的優(yōu)先級。優(yōu)先級越高,越不容易被拉伸,默認(rèn)是250。
- Content Compression Resistance Priority: 該優(yōu)先級和上面那個優(yōu)先級相對應(yīng),表示一個控件抗壓縮的優(yōu)先級。優(yōu)先級越高,越不容易被壓縮,默認(rèn)是750
切換表情鍵盤
/**
切換表情鍵盤
*/
func inputEmoticon()
{
print(#function)
// 結(jié)論: 如果是系統(tǒng)自帶的鍵盤, 那么inputView = nil
// 如果不是系統(tǒng)自帶的鍵盤, 那么inputView != nil
// print(textView.inputView)
// 1.關(guān)閉鍵盤
textView.resignFirstResponder()
// 2.設(shè)置inputView
textView.inputView = (textView.inputView == nil) ? emoticonVC.view : nil
// 3.從新召喚出鍵盤
textView.becomeFirstResponder()
}
==與isEqual的區(qū)別
==運算符只是簡單地判斷是否是同一個對象,即對象的地址是否相等 ,而isEqual方法可以判斷對象是否相同, 例如UIColor對象表示的color是否相同
cell點擊展開關(guān)閉動畫效果
1、
模型修改cell的高度,調(diào)用方法
[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動畫必設(shè)屬性設(shè)置
/*基礎(chǔ)動畫*/
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"];
【彈性動畫相關(guān)屬性設(shè)置】
springBounciness:4.0 //[0-20] 彈力 越大則震動幅度越大
springSpeed :12.0 //[0-20] 速度 越大則動畫結(jié)束越快
dynamicsTension :0 //拉力 接下來這三個都跟物理力學(xué)模擬相關(guān) 數(shù)值調(diào)整起來也很費時 沒事不建議使用哈
dynamicsFriction:0 //摩擦 同上
dynamicsMass :0 //質(zhì)量 同上
【注意:POPSpringAnimation是沒有duration字段的 其動畫持續(xù)時間由以上幾個參數(shù)決定】
/*衰減動畫*/
POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];
anim.velocity = @(1000.);
[layer pop_addAnimation:anim forKey:@"slide"];
【可配置屬性】
deceleration:0.998 //衰減系數(shù)(越小則衰減得越快)
【注意:這里對POPDecayAnimation設(shè)置toValue是沒有意義的 會被忽略(因為目的狀態(tài)是動態(tài)計算得到的)<br>
注意:POPDecayAnimation也是沒有duration字段的 其動畫持續(xù)時間由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當(dāng)前的屬性值
writeBlock中修改變化后的屬性值
threashold決定了動畫變化間隔的閾值 值越大writeBlock的調(diào)用次數(shù)越少】
xib創(chuàng)建tableView的Header約束報錯
/// xib創(chuàng)建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設(shè)置item時,排版問題。
有title的會被排放在最后面,沒有title的會被放到前面,注意一下,應(yīng)該設(shè)置self.navigationItem.title
Autolayout對多行文本Label進行布局,高度不準(zhǔn)確的解決辦法
如果是計算多行UILabel,并且width不是固定的話(自動布局適配屏幕就是不固定,寫死的數(shù)值算固定),需要設(shè)置label的preferredMaxLayoutWidth屬性,否則計算的結(jié)果會有偏差!
textView自動計算高度
textView的scrollEnable屬性設(shè)置為NO,這樣的話,textView的高度約束>=120,這樣就會進行自動計算了.
collectionView流水布局flow,item等寬,間距相等
需要設(shè)置contentInset左右間距和margin相等
物理仿真器 UIDynamicAnimator
金錢金額不用float和double
- 精確度問題,不使用float和double,*/ 都會改變精度
聊天或者評論界面的布局設(shè)計
1.tableview 頂部約束為0 ,評論框 與tableView 四周約束為0 ,這時,當(dāng)鍵盤彈起的時候 tableView的視圖不會產(chǎn)生變化,會有tableView的cell被鍵盤擋住的現(xiàn)象
2.tableView 頂部約束不設(shè)置,設(shè)置tableView的高度 = 屏幕高度- 鍵盤工具欄的高度.這時,當(dāng)鍵盤彈起的時候 tableView的視圖會從當(dāng)前cell 處向上彈起,不會又被鍵盤擋住的現(xiàn)象,可是當(dāng)tableview中的數(shù)據(jù)較少時,會有整體向上移動,導(dǎo)致數(shù)據(jù)也向上移動的情況.
IQKeyboardManager
1:IQKeyboardManager在需要解決鍵盤遮擋時會去遞歸找可滾動的父視圖進行偏移,如果沒有就對window的frame做文章
2:核心方法是adjustFrame,通過它解決鍵盤遮擋
tableView下拉,頭像放大
原理很簡單,就是在UITableview上邊添加一個圖片子視圖,在tableview拖動的時候動態(tài)的改變圖片的frame,就可以實現(xiàn)這個效果。
Swift和OC混編
1.創(chuàng)建橋接文件.h
.h文件名: 項目名-Bridging-Header.h
里面的內(nèi)容: #import <UIKit/UIKit.h>
2.Build Settings -> Use Legacy Swift Language Version:把后面的改成YES即可。
3.XCode -> Edit -> Convert -> To Current Swift Syntax...
4.直接導(dǎo)入swift文件 -> #import 項目名-Swift.h
tableviewCell 左滑多個按鈕
1.首先UITableViewDataSource重寫這個方法,系統(tǒng)就會自動添加這種操作。
- (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath
2.ios8.0 之后蘋果開放了這樣一個API:
-(nullable NSArray
*)tableView:(UITableView*)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
返回一個UITableViewRowAction數(shù)組,每一個"Action"代表一個側(cè)滑刪除的Button。這樣側(cè)滑每一行Cell可以有更多按鈕提供給用戶交互。
- http://www.cocoachina.com/ios/20151118/14243.html
ios 11 之后
1.NavBar的titleView支持autoLayout
這要求titleView必須是能夠自撐開的或?qū)崿F(xiàn)了- intrinsicContentSize
- (CGSize)intrinsicContentSize {
return UILayoutFittingExpandedSize;
}
2.安全區(qū)域概念
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
- http://www.itdecent.cn/p/efbc8619d56b iOS 11 安全區(qū)域適配總結(jié)
3.大標(biāo)題
iOS11導(dǎo)航欄多了一個LargeTitleView,專門顯示大字標(biāo)題用的,整個導(dǎo)航欄的高度達到了96p,比之前的導(dǎo)航欄多了32p,不過,大字標(biāo)題默認(rèn)是關(guān)閉的,所以一般情況下,導(dǎo)航欄的高度還是64p