1.在iOS11之后調(diào)用[tableView reloadData];當(dāng)數(shù)據(jù)多的情況下會(huì)出現(xiàn)閃屏的情況汁针,解決這種情況有以下兩種發(fā)方法:
1.1
_tableView.estimatedRowHeight = 0;
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;
1.2
__weak typeof (self)wself = self;
[UIView performWithoutAnimation:^{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:2 inSection:0];
[wself.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}];
2.ViewController內(nèi)容向下偏移的問(wèn)題
2.1
從iOS7開(kāi)始,蘋(píng)果把self.navigationController.navigationBar.translucent = YES 作為默認(rèn)處理症概。對(duì)此蘋(píng)果注釋的解釋為 // Default is NO on iOS 6 and earlier. Always YES if barStyle is set to UIBarStyleBlackTranslucent
當(dāng)你將導(dǎo)航欄設(shè)置為不透明時(shí)(self.navigationController.navigationBar.translucent = NO;)這時(shí)候就會(huì)出現(xiàn)一個(gè)問(wèn)題,當(dāng)你push的控制器以ScrollView或TableView為主View時(shí)酪夷,模糊處理會(huì)使?fàn)顟B(tài)欄和NavigationBar擋住后面的視圖酪耕,所以蘋(píng)果會(huì)自動(dòng)把主View的內(nèi)容向下移動(dòng)64px,同理滓彰,底部Tabbar會(huì)使主View向上偏移49px控妻,Toolbar會(huì)使主View向上偏移44px 。這時(shí)候可以通過(guò)2.2的方法設(shè)置他不向下偏移揭绑。
2.2
UIScrollerView 在iOS10弓候,如果上一個(gè)頁(yè)面隱藏導(dǎo)航欄或者當(dāng)前ViewController的導(dǎo)航欄設(shè)置為不透明狀態(tài),那么下一個(gè)頁(yè)面的autoAdjust需取消或者其UIScrollerView的top-margin約束于該controller的view的top他匪。也可以通過(guò)代碼實(shí)現(xiàn)實(shí)現(xiàn):
if (@available(iOS 11.0, *)) {
scrollview.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
3.UITabBarController模態(tài)彈出ViewController
當(dāng)在UITabBarController的viewDidLoad中執(zhí)行[self presentViewController:vc animated:YES completion:nil];時(shí)報(bào)錯(cuò)如下:
Warning: Attempt to present <ViewController: 0x104f12010> on <TabbarViewController: 0x105020800> whose view is not in the window hierarchy!
原因是當(dāng)前Tabbar還未初始完成菇存,解決方法是:只要將[self presentViewController:vc animated:YES completion:nil];寫(xiě)在viewDidAppear就可以了.
4.Storyboard/xib的UIButton當(dāng)調(diào)用setTitle的時(shí)候出現(xiàn)文字閃動(dòng)的情況,只需要將該type改為UIButtonTypeCustom就好了邦蜜,因?yàn)橄到y(tǒng)默認(rèn)為UIButtonTypeSystem依鸥。
5.transitionFromViewController切換ViewController容易出現(xiàn)的UI問(wèn)題:
UIViewController *oldViewController = _currentVC;
UIViewController *newController = sender.selectedSegmentIndex ? _warnningVC : _equipmentVC;
newController.view.frame = _contentView.bounds;
[self transitionFromViewController:oldViewController toViewController:newController duration:1.0 options:UIViewAnimationOptionTransitionNone animations:nil completion:^(BOOL finished) {
_currentVC = newController;
sender.userInteractionEnabled = YES;
}];
newController.view.frame = _contentView.bounds;這里必須給newController重新設(shè)置frame,否則會(huì)出現(xiàn)UI適配問(wèn)題。
6.iOS編碼規(guī)范
6.1 私有變量
以 _ 開(kāi)頭悼沈,第一個(gè)單詞首字母小寫(xiě)贱迟,后面的單詞的首字母全部大寫(xiě)。
eg:UILabel *_nameLbl;
6.2 property變量
小駝峰式命名:第一個(gè)單詞以小寫(xiě)字母開(kāi)始絮供,后面的單詞的首字母全部大寫(xiě)
Block衣吠、NSString屬性應(yīng)該使用copy關(guān)鍵字
禁止使用synthesize關(guān)鍵詞
eg:@property (nonatomic, readwrite, copy) NSString *userName;
6.3 宏和常量
6.3.1 宏
#define 預(yù)處理定義的常量全部大寫(xiě),單詞間用 _ 分隔
宏定義中如果包含表達(dá)式或變量壤靶,表達(dá)式或變量必須用小括號(hào)括起來(lái)缚俏。
6.3.2 常量
對(duì)于局限于某編譯單元(實(shí)現(xiàn)文件)的常量,以字符k開(kāi)頭,例如kAnimationDuration袍榆,且需要以static const修飾
對(duì)于定義于類頭文件的常量胀屿,外部可見(jiàn),則以定義該常量所在類的類名開(kāi)頭包雀,例如EOCViewClassAnimationDuration, 仿照蘋(píng)果風(fēng)格宿崭,在頭文件中進(jìn)行extern聲明,在實(shí)現(xiàn)文件中定義其值
//宏定義的常量
#define ANIMATION_DURATION 0.3
#define MY_MIN(A, B) ((A)>(B)?(B):(A))
//局部類型常量
static const NSTimeInterval kAnimationDuration = 0.3;
//外部可見(jiàn)類型常量
//EOCViewClass.h
extern const NSTimeInterval EOCViewClassAnimationDuration;
extern NSString *const EOCViewClassStringConstant; //字符串類型
//EOCViewClass.m const NSTimeInterval EOCViewClassAnimationDuration = 0.3; NSString *const EOCViewClassStringConstant = @"EOCStringConstant";
7.SourceTree保存密碼--解決每次pull才写、push都要輸入兩次密碼的問(wèn)題
提供一個(gè)簡(jiǎn)單的解決方法葡兑,即在遠(yuǎn)程倉(cāng)庫(kù)的url中顯示輸入username和password,每次就不用再重復(fù)輸入赞草,當(dāng)然也有一定的安全隱患讹堤,可根據(jù)實(shí)際情況決定是否采用。
1)選中菜單:Repository(倉(cāng)庫(kù))-- Repository settings(倉(cāng)庫(kù)設(shè)置) --Remotes--選中url--Edit厨疙;
2)比如URL為:http://xxxxx/xxxx.git 修改為:http://username:password@xxxxx/xxxx.git (即新增username:password@)
username和password分別為你登錄的用戶名和密碼洲守,之后就不用每次都輸入密碼了。
個(gè)人實(shí)踐:主要設(shè)置一個(gè)沾凄、拉取梗醇、刪除用戶名密碼—都可以了
8.OC項(xiàng)目中pod ReactiveCocoa 報(bào)錯(cuò)
刪除reactiveCocoa 里面所有的swift文件 刪除result文件夾里面所有文件 刪除result.framework
重新pod install
9.TableView設(shè)置為UITableViewStyleGrouped時(shí)頂部有空白占位View
這是因?yàn)楫?dāng)tableView為UITableViewStyleGrouped時(shí),蘋(píng)果會(huì)給其headerView和footView一個(gè)默認(rèn)高度撒蟀,只要設(shè)置self.tableView.tableHeaderView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 0, 0.01)];就行了叙谨,注意高度必須大于0,0的話會(huì)拿系統(tǒng)默認(rèn)的高度保屯。