2015-11-19 45 views
2

我在UITableView的最後一行有UITextView。我想按照正常工作的文本自動擴展UITextView。但隨着UITextView擴大,UITableViewCell也應擴大。我在textViewDidChange中嘗試了reloadRowsAtIndexPaths,但一次又一次地重新加載了導致UITextViewresignFirstResponder的單元格。
這是代碼:UITextView在UITableView中自動展開

- (void)textViewDidChange:(UITextView *)textView 
{ 
    CGRect frame = textView.frame; 
    frame.size.height = textView.contentSize.height; 
    textView.frame = frame; 
    [tableMessageDetail beginUpdates]; 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:(int)txtReplyBottom.tag inSection:0]; 
    [tableMessageDetail reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
    [tableMessageDetail endUpdates]; 
} 
+0

爲什麼ü添加TextView的最後一排的UITabeView?我建議將它設置爲TableViewFooter –

+0

@HossamGhareeb:你如何建議更新TableViewFooter的高度? – Nitish

+0

如何嘗試將頁腳框更新爲textView的同一幀?我不確定這會起作用,但給它一個 –

回答

7

的Gif

細胞自動版式

我添加一個高度約束具有> = 50

代碼

@interface SelfSizingCell()<UITextViewDelegate> 

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint; 

@property (weak, nonatomic) IBOutlet UITextView *textview; 

@end 
@implementation SelfSizingCell 

- (void)awakeFromNib { 
    // Initialization code 
    self.textview.delegate = self; 
    self.textview.scrollEnabled = false; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

// Configure the view for the selected state 
} 
-(void)textViewDidChange:(UITextView *)textView{ 
    CGSize size = [textView sizeThatFits:CGSizeMake(CGRectGetWidth(self.frame), CGFLOAT_MAX)]; 
    CGFloat height = size.height; 
    if (height < 50) { 
     self.heightConstraint.constant = 50; 
    }else{ 
     self.heightConstraint.constant = height; 
    } 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 
@end 

.H

@interface SelfSizingCell : UITableViewCell 

@property (weak,nonatomic)UITableView * tableView; 

@end 

而且tableviewController

@implementation TableViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.tableView registerNib:[UINib nibWithNibName:@"SelfSizingCell" bundle:nil] forCellReuseIdentifier:@"cell"]; 
    self.tableView.estimatedRowHeight = 50; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 
} 
#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 1; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    SelfSizingCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    cell.tableView = self.tableView; 
    return cell; 
} 
+0

應該是被接受的答案。 +1 –

+0

UITextView不在IB中創建。我正在以編程方式創建它。 – Nitish

+0

@Nitish,創建一個HeightConstraint並更新高度。 (item:newView,attribute:NSLayoutAttribute.Height,relatedBy:NSLayoutRelation.Equal,toItem:nil,attribute:NSLayoutAttribute.NotAnAttribute,multiplier:1,constant:100) view.addConstraint(heightConstraint) let heightConstraint = NSLayoutConstraint –