iOS UITextView 輸入內容實時更新cell的高度
http://www.cocoachina.com/ios/20141226/10778.html
這篇文章介紹了在一個動態資料的 table view 中,cell 根據 text view 內容的輸入實時改變 cell 和 table view 的高度。自動計算 cell 高度的功能使用 iOS 8 才支援的自適應 cell,如果你還不知道 iOS 8 自適應 cell,可以參看這篇文章:iOS 8 自適應 Cell
先上圖,我們最終要實現的效果是這樣的:
圖 1:實時更新 cell 高度
實現上面效果的基本原理是:
-
在 cell 中設定好 text view 的 autolayout,讓 cell 可以根據內容自適應大小
-
text view 中輸入內容,根據內容更新 textView 的高度
-
呼叫 tableView 的 beginUpdates 和 endUpdates,重新計算 cell 的高度
-
將 text view 更新後的資料儲存,以免 table view 滾動超過一屏再滾回來 text view 中的資料又不重新整理成原來的資料了。
功能具體實現方法
新建一個專案,拉出 TableViewController,在 cell 上新增一個 UITextView。
首先設定 text view 的 autolayout,比較關鍵的 constraint 是要設定 textView 的高度大於等於一個值。如圖:
圖 2: Text view 的 autolayout 設定
然後,設定 UITextView 的 scrollEnable 為 NO。這一點很關鍵,如果不設定為 NO,UITextView 在內容超出 frame 後,重新設定 text view 的高度會失效,並出現滾動條。
圖 3:去掉 scrolling enable 勾選
根據剛才在 storyboard 中建立的 cell,新建一個 UITableViewCell 類。
1 2 3 4 |
#import <uikit
uikit.h=""> @interface TextViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UITextView *textView;
@end</uikit>
|
建立 TableViewController 並初始化一些資料
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#import "TableViewController.h"
#import "TextViewCell.h"
@interface TableViewController ()
@property (nonatomic, strong) NSArray *data;
@end
@implementation TableViewController
- (void)viewDidLoad {
[ super viewDidLoad];
// 支援自適應 cell
self.tableView.estimatedRowHeight = 100;
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.data = @[@ "Cell 1 " , @ "Cell 2" , @ "Cell 3" , @ "Cell 4" , @ "Cell 5" , @ "Cell 6" , @ "Cell 7" , @ "Cell 8" ];
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return
|