可使用autolayout
_mainTableView.estimatedRowHeight = 44;
_mainTableView.rowHeight = UITableViewAutomaticDimension;
一個tableview的cell會保持自己的instance,你無法取代新的instance該裡面的cell,尤其UIWebView塞進cell更是難以計算高度,用之前千萬三思。
Android ListView更為複雜,一個getView會call三次左右才決定一個item,我設計了一個polymorphism 的架構來控制items
interface {
public abstract int getType();
public abstract void setViewHolder(View convertView);
public abstract void inflateViewHolder(View convertView);
public abstract View getTemplateView(ViewGroup parent);
}
@Override
public int getItemViewType(int position) {
return ((interface) getItem(position)).getType();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int type = getItemViewType(position);
if (convertView != null) {
mList.get(position).inflateViewHolder(convertView);
} else {
convertView = mList.get(position).getTemplateView(parent);
mList.get(position).setViewHolder(convertView);
}
return convertView;
}
mList必須保持所有子item的data instance,注意只有data不存view,那麼getItemViewType內的gettype決定你item type,之後需傳入convertView給該子item作render。以及null的情況下new一個新的instance view給convertView。
目前使用起來沒出問題,listview item開兩萬個也無礙,我想應該是可行的。