IOS调整UITextView的IM程序

时间:2013-05-14 23:52:11

标签: ios uitableview ios6 resize uitextview

目前我有一个程序可以在用户之间显示聊天消息。它将每条消息放在一个单元格中,并将消息存储在单元格中包含的UITextView中。 UITextView具有应用于视图的背景。我究竟如何调整文本视图的大小以便调整背景大小并将动态内容正确放置在一边?此外,您建议将是与视图一起调整单元格大小的最佳方法。我知道有很多类似的帖子,但我似乎无法找到适用于这种特定情况的任何东西。他们要么在没有视图和背景的情况下调整内容的大小,要么在单元格调整大小时,它会出现故障并且与文本视图内容的大小不一致。这是在cellForRowAtIndexPath中使用的代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MessageCell *cell;
    Message *message = [_messages objectAtIndex:(indexPath.row)];

    if ([[[PFUser currentUser] objectId] isEqualToString:message.sender])
    {
        cell = (MessageCell *)[tableView dequeueReusableCellWithIdentifier:@"SenderCell"];
        cell.message.text = message.message;
    }
    else
    {
        cell = (MessageCell *)[tableView dequeueReusableCellWithIdentifier:@"RecipientCell"];
        cell.message.text = message.message;
    }

    return cell;
}

4 个答案:

答案 0 :(得分:0)

您可以使用NSString类的以下任何方法来计算textView大小,并从那里动态调整textView框架的大小。例如:

textView.text sizeWithFont:[UIFont fontWithName:@"" size:18.0]];

如果您阅读NSString类引用,还有许多其他方法可以计算大小。

答案 1 :(得分:0)

使用hpgrowingtextview调整文本视图的大小。

并使用EditableViewCell 基于文本大小调整单元格大小

OR表示可编辑的tableview单元格

编写以下方法来重新加载uitableview的数据。为此,您可以使用自定义单元格进行uitableview。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [arrChatMessage count];
}

-(CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *textc1 = [arrChatMessage objectAtIndex:indexpath.row];
    CGSize constraintc1 = CGSizeMake(320, 2000);   
    //320 means width of your label in which you want to display chat message
    CGSize sizec1 = [textc1 sizeWithFont:[UIFont fontWithName:@"Arial-BoldMT" size:12.0] constrainedToSize:constraintc1 lineBreakMode:UILineBreakModeWordWrap];
    //font and font size of your label in which you want to display chat message
    return sizec1.height;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ChatListCustomCell *cell = (ChatListCustomCell *)[tblChatList dequeueReusableCellWithIdentifier:@"ChatListCustomCell"];

    if (cell != nil)
        cell = nil;

    NSArray* nib = [[NSBundle mainBundle] loadNibNamed:@"ChatListCustomCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
    cell.showsReorderControl = NO;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.backgroundColor=[UIColor clearColor];

    //..............

    NSString *textc1 = [arrChatMessage objectAtIndex:indexpath.row];
    CGSize constraintc1 = CGSizeMake(320, 2000);   
    //320 means width of your label in which you want to display chat message
    CGSize sizec1 = [textc1 sizeWithFont:[UIFont fontWithName:@"Arial-BoldMT" size:12.0] constrainedToSize:constraintc1 lineBreakMode:UILineBreakModeWordWrap];
    //font and font size of your label in which you want to display chat message

    cell.lblChatMessage.text = [arrChatMessage objectAtIndex:indexpath.row];
    cell.lblChatMessage.frame = CGRectMake(0,0,320,sizec1.height);
}

答案 2 :(得分:0)

查看免费的Sensible TableView框架。有一个文本视图,可以随着内容的增长自动调整大小。

答案 3 :(得分:0)

我为此创建了UITextView的子类:

https://github.com/MatejBalantic/MBAutoGrowingTextView

它是一个基于自动布局的轻量级UITextView子类,它根据用户输入的大小自动增长和缩小,并且可以通过最大和最小高度进行约束 - 所有这些都没有一行代码。

主要用于“界面”构建器,仅适用于“自动布局”。

这将解决UITextView的大小调整问题。要确保还调整表视图单元格的大小,请分配UITextView委托并在其中定义此方法:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

使用它,您可以在每次输入/删除文本时检测到,并确保UITextView的新大小也适用于tableview单元格。