不等高cell自定義的思路精髓

## 精華界面不等高cell的搭建

1 . 精華界面搭建,tableview展示數據;

不等高cell(復雜界面)

1.1 劃分結構(功能結構)top view ?middle ?view ? 最熱評論view? 底部的view

1.2 搭建界面方式:純代碼 (因為有些結構不確定是否顯示)

1.3. 當cell一開始創建的時候,把所有子結構全部添加上去;

知識點:

通過注冊class創建cell;那么cell創建的 方式initwithStyle

通過代碼創建cell,必定來initwithStyle 方法

不會來到initWithframe

什么時候來到initWithframe方法呢?控件通過init方法 才會執行initWithframe

通過XIB就必定來到 awarkFromeNib ;

A .cell不同架構流程思想:

1.頂部view的展示:

自定義cell,因為有些功能系統可能實現不了,所以需要自定義cell;

由于整個cell可以大致分為4個模塊,并且都有自己的功能與邏輯;再自定義View.XIB;

2.數據傳值;

自定義cell中拿不到XIB中控件,傳不了值;需要跨多個類傳值;

所以每個類當中定義模型屬性。傳值,重寫set方法;

3.計算cell的frame

在哪里計算?

一般是在heightForRowAtIndexPath:方法中進行計算,但是這個方法調用頻率非常高;所以最好只需要計算一次就行;在數據請求成功的時候,但是cell還沒有刷新的時候就計算好高度就可以;

疑問:在顯示cell的時候,為什么文字有的能顯示,有的只顯示一半,有的超過了cell的高度;

猜算,估計是cell的循環利用出現錯誤;

4.MVVM思想:

將模型中保存的數據給到視圖模型;取數據,存數據都是存視圖模型當中;

VM專門去處理視圖業務邏輯,計算視圖子控件frame

抽取思路:

a. 創建視圖模型 (nsobject)

b. 請求數據,字典數組變成模型數組,定義指針指向他;

c. 遍歷模型數組;創建視圖模型,將遍歷出的模型數據給到視圖模型;

d. 視圖模型:定義模型屬性保存傳入的數據;

注意:在傳值的時候就直接把cell的frame計算出來;

e. ?重寫set方法;在set方法中給cell計算尺寸;

f. 在外面定義屬性保存cell的frame;和topView的frame

為什么要定義兩個?、??

因為一個cell里面包含了topview,還有其他的view,并且之后的view都是添加到top view的后面的;

B .中間圖片展示

1.架構搭建;

為什么要用XIB去做???

因為中間的圖片有可能顯示圖片,視頻,音頻。或者不顯示;那這個時候就不怎么好去做,只要是不確定的控件,

該隱藏的隱藏,不該隱藏的就顯示,做個判斷就可以;

A. 注意點,在進行命名的時候;一定不要把XIB的名字設置成跟某一個控制器的名稱一樣;如果一樣,那么在加載過程中,底層會先判斷該文件當中,有沒有同名的view,或者去掉controller的view,只要有一個符合,那么控制器首先就會去加載這些相同的view;

B.描述XIB時,他的frame不用去管,只需要確定內部子控件的約束就行;具體的frame在外面才計算

C.設置picture view的尺寸,它的Y值是以top view ?cell 的高度為基準;

D.不要犯SB錯誤了;

因為在initwithstyle 方法中加載picture view的時候,盡然用了alloc ?init ?,卻沒有調用加載XIB的類方法;死活出不來數據

C.中間圖片的細節處理

問題1. GIF圖,不是大圖,就把點擊查看大圖按鈕隱藏起來;

問題2 . 大圖又太長。并且有些大圖寬度是不夠的,如何解決?

設置圖片的高度的時候,判斷H是大于屏幕的高度,是的就將H定在某個值;并且記錄當前是大圖,賦值Yes;

在下載圖片完成的時候,將圖片畫出來;

畫之前,最好判斷是不是大圖,不是就不用畫;

a.開啟圖形上下文;帶有三個參數的;第一個,繪畫的范圍;第二,填NO 第三 。0 就行

b。畫圖

c. 獲取繪畫的圖片;

d.關閉上下文,

e.將最新的圖片賦值回去;

D.下載進度條的處理

進度條,一般都是去github去搜索,別人的一些框架;都是下載回來就用

利用終端下載框架;

包含頭文件

思路:

1.控件通過XIB,一定會來到awerkFromeNib方法;

a.設置進度條的顏色,以及進度值;

進度條

2.重寫SET方法

a.圖片下載到到沙盒

b. 如果沙盒中有,直接讓進度條變為0;不下載;

c.如果沒有,就下載;

事先把進度條清0;利用SD框架下載

如何讓下載的進度顯示文,真實的數據滾動???想要顯示進度條,在progress中顯示;


E,視頻界面搭建處理

視屏也用XIB描述

a. 他的frame只需要設置一次就可以了,將frame修改為統一的屬性描述;

b.如何加載視屏類型???

c.在加載數據的時候,增加相對應的參數值,下載的數據就會不一樣;

d.模型中添加界面需要的屬性值;

e.cell中獲取數據的時候,判斷一下,返回的是什么類型的參數;不要的隱藏,要的顯示;

f. ? 拿到控件進行賦值的時候;要求記錄多少時間;

g.每個類都需要加載XIB,并且擁有模型屬性;

抽取一個基類,將模型,加載XIB方法,添加進去,子類繼承他自然就會有父類的方法

G: 音頻界面搭建處理:

a.音頻I的XIB搭建;

b.cell中傳遞數據信息,進行判斷; 類型是音頻,就把其他控件,視頻,圖片隱藏; 不是音 ? ? ?頻,就全部隱藏,就是段子

c.數據賦值注意點

時間的算法跟上圖的一樣;

H:最熱評論view搭建,分析

a. 有可能出現兩種不同的情況;

1.只有評論,沒有聲音;

2.只有聲音,沒有評論;

XIB中評論先確定好位置;然后再往lable上面添加一個view;view里面放其他控件;

b. 搭建完,查看數據并設置模型屬性

1.特點,數組中包含字典,字典包含字典;復雜層次結構;

解決思路:開發中碰到這種情況;一般是一個字典對應一個模型;如果用數組去解決的話,很麻煩;


1.1 利用MJ框架,MJ框架底層是在做什么事情呢?

mj框架轉模型,底層會去遍歷模型的屬性;去文件中找,找到了就會幫他去賦值;

1.2,如何將數組中的值轉換到模型屬性中去?

取出數組中的第一個字典,kvc將字典轉換成模型;

2。尺寸設定問題:

1. 視圖模型中去寫尺寸;視圖模型專門處理這些視圖控件的業務邏輯

1.1 判斷是否是評論模型

判斷模型中的屬性有沒有內容(文字),只要是判斷,文字的內容就用length

是 ==》計算文字的內容;根據內容計算文字高度;

不是 ===》 另外計算;

1.2. 在view中對控件賦值;

還是先判斷模型中有沒有內容長度;

有===》就是文字評論 ? 對文字進行一個拼接;

沒有===》語音音頻;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容