有這么一種需求,在列表頂端顯示一些別樣的數據,而這個別樣的數據則需要通過一個別樣的 View 來展現,它便是 UITableView 的 tableHeaderView。
倘若 tableHeaderView 里的內容很固定,高度不要隨著內容的不同而改變,這樣還好。
如果,高度是需要動態改變的,某些人(比如我)可能就會遇到這樣一個難題:
已經給 view 中的每個子 view 設置過值了,高度算過了,frame 也重新設置過了,可 tableHeaderView 的高度卻還是之前的高度,沒有變化。內容變多,則會有一部分看不見了;內容變少,則有一部分空白,放在那里實在不好看。
怎么辦??
view 作為 tableView 的 tableHeaderView,單純的改變 view 的 frame 是無濟于事的,tableView??不會大度到時刻適應它的高度(以后 Apple 會不會改變就不知道了),所以,如何告訴tableView 它的 tableHeaderView 已經改變了?很簡單,就一句話(關鍵最后一句):
[webView sizeToFit];
CGRect newFrame = headerView.frame;
newFrame.size.height = newFrame.size.height + webView.frame.size.height;
headerView.frame = newFrame;
[self.tableView setTableHeaderView:headerView];
這樣以后,效果就出來了。不過這種過度顯得有些生硬,能不能加一點點動畫,讓它變得順眼一些呢?試試下面的代碼:
[self.tableView beginUpdates];
[self.tableView setTableHeaderView:headerView];
[self.tableView endUpdates];