今天一整天感覺都郁悶了今艺,接手的項目里面有很多沒有考慮清楚的問題,讓現(xiàn)在的工程一會報錯一會出現(xiàn)新的問題爵卒⌒槎校總結(jié)了兩個需求的幾個優(yōu)化方案,記錄下來钓株。
1.實現(xiàn)類似表格的控件
? 第一個版本 ?在xib里面拖控件
我接手的時候实牡,在項目的競猜模塊,前一位直接在xib里面畫的控件轴合。實現(xiàn)如下:
其實對于xib拖控件這個想法创坞,我覺得對于一些靜態(tài)頁面或者變動不是很大的動態(tài)頁面的時候我會考慮,因為會在很短的時間內(nèi)實現(xiàn)整個界面的布局受葛,代碼量少题涨、適配簡單而且整個流程一目了然偎谁。
但是對于本身的項目需求而言:
1.小模塊過多,需要十分小心布局適配纲堵。要是需求一邊巡雨,又得重畫
2.表格中里面所有的字都是動態(tài)獲取的,這拖label就得花一定的時間而且易亂
所以我是不贊同使用這個方法畫表格的席函,所以在新的需求到來的時候進行了改版
第二個版本? 自定義collectionView的layout
看過collectionView的官方文檔應(yīng)該知道铐望,layout里面有一些方法十分方便的可以重新布局。實現(xiàn)如下(表格內(nèi)動態(tài)數(shù)據(jù)):
其實這個布局相當(dāng)于把每一行當(dāng)做一個section茂附,每一列當(dāng)做一個item正蛙。
因為我是將這個collectionView當(dāng)做tableView的cell,所以設(shè)置collectionView的可滾動性為NO营曼。數(shù)據(jù)也是直接從cell方面?zhèn)鬟^來的乒验。
所以我的自定義的layout代碼如下:
當(dāng)然,這里我是將"參賽人成績"放在外面tableView的headerView上蒂阱,你也可以通過
-(UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
布局到collectionView上徊件。一定要注意一點:如果layout自定義布局里面包括headerView,那么設(shè)置cell的y值時一定要將headerView的大小位置考慮進行蒜危。就像一塊白板虱痕,所有控件之間的相對位置、關(guān)系都需要考慮好辐赞。
第三個版本 ?設(shè)置基類
因為項目里面有很多個不同的界面有類似的表格部翘,千萬不要傻到每一個界面都去關(guān)聯(lián)一個layout。如果對于collectionView里面的cell布局响委、顏色新思、之類的都一樣的話,直接就用一個collectionView就可以了赘风。但是如果cell有大的變動夹囚,可以設(shè)置一個collectionView的基類,這樣就可以使用一個layout了邀窃。
2.多TextField的頁面
第一個版本
項目里面的頁面基本都是包括很多TextField的荸哟,所以在處理的過程中出現(xiàn)了一些莫名其妙的問題。
nav導(dǎo)航欄的上面出現(xiàn)了一大塊的留白瞬捕,問題如下:
而且向上向下都無法滾動
第二個版本 修復(fù)問題
前面說了項目里面的頁面基本上很多TextField鞍历,這個頁面的下一個頁面也有TextField,而之前的開發(fā)者:
居然選擇了監(jiān)聽鍵盤彈出事件肪虎?A涌场!扇救!
所以刑枝,如果所有有多個有TextField的頁面在同一個NavigationController中,盡量不要用鍵盤的監(jiān)聽香嗓,即使你處理了resignFirstResponder,但是請注意:是擁有多個TextField的頁面W俺靠娱!
反正我目前只能修復(fù),后期再重新理一遍邏輯重寫洁灵。
不再監(jiān)聽,改成使用TextField 的方法:
這個爆炸的問題稍稍解決之后掺出,又出現(xiàn)問題了:項目之前寫的是:
self.view.transform = CGAffineTransformMakeTranslation(0, -height);
二個:
1.不記得從哪里看過的徽千,盡量不要移動viewController本身的view。這貨移動的可歡了汤锨,基本上每一個界面都是双抽?!既然上面鋪了一層scrollView闲礼,為啥不用牍汹?
self.scrollView.transform = CGAffineTransformMakeTranslation(0, -height);
2.CGAffineTransformMakeTranslation這個是控制移動的,之前就是大概的用了一下柬泽,現(xiàn)在有個問題就是多個移動的時候慎菲,出現(xiàn)不移動的效果。網(wǎng)上講的也聽不懂锨并,什么中心相對位置之類的露该,還是過幾天去看官方的問題。所以我直接就不用了第煮,有scrollView解幼,為啥不用呢?
self.scrollView.contentOffset = CGPointMake(0, _keyboardHeight);
第二個版本 優(yōu)化問題
其實項目的前任基本上都是拖拽控件,其實很簡易而且清晰包警,但就是邏輯沒有考慮很清楚撵摆,導(dǎo)致很多地方即使一樣的布局還是畫了不少的view。所以就我個人而言:拖拽可以害晦,但是還是以小布局為主特铝,不是整體頁面為主。
其次壹瘟,真的要學(xué)好英語苟呐,不要用中文拼音命名,要直接了當(dāng)俐筋。一定要注釋牵素!不需要太多,像我個人的習(xí)慣澄者,會在.h文件上方寫上這是哪一個模塊的使用類:
最后笆呆,測試吧请琳,希望我在所有問題解決完之前不要有白頭發(fā)。哈哈哈哈