我正在创建一个有聊天窗口的应用程序。在此窗口中,自定义单元格中的图像上有一个图像和一个标签。
我有两个自定义单元格,一个用于发送方,另一个用于接收方。两个单元格左右对齐都是相同的。
我希望当评论的长度增加时,整个评论会在该图像中的多行显示(也会增加图像大小)。 我该如何处理这种情况? 我正在使用setVariable方法在单元格上设置内容。我正在尝试评论代码框架,如下面的评论代码,但它不起作用
- ( void ) setComment : ( NSString* ) Comment
{
[ txtComment setText : Comment ] ;
/*CGRect frame1 = txtComment.frame;
frame1.size.height = txtComment.contentSize.height;
txtComment.frame=frame1;*/
}
答案 0 :(得分:0)
我建议您使用自动布局来定义自定义单元格高度。它将帮助您根据注释的长度创建动态单元格高度。您可以在this link
中阅读有关使用动态高度的动态高度的信息答案 1 :(得分:0)
要完成此操作,您可以执行以下操作:
UITableViewCell子类,还可以创建xib文件。
转到xib文件并将UIImageView和UILabel对象添加到您的单元格中。还要为标签创建一个插座。
正如Pavan Kotesh所说,最简单的方法是使用自动布局。
将顶部空间和底部空间约束添加到图像视图和标签的单元格内容视图中。然后为两个子视图设置x位置的约束,最后设置宽度和高度约束。
高度限制必须是“大于等于”类型才能更改视图的大小。
在Interface Builder中完成所有操作后,您只需要在子类中添加一个方法来设置消息。
- (void) setMessage: (NSString*) message
{
CGFloat oldLabelSize = _label.frame.size.height;
_label.text = message;
[_label sizeToFit];
CGFloat newLabelSize = _label.frame.size.height;
CGRect frame = self.frame;
frame.size.height += newLabelSize - oldLabelSize;
self.frame = frame;
}
调用此方法后,将单元格作为子视图添加到聊天视图中。
编辑:
我认为你的-cellForRowAtIndexPath方法实现是错误的。 [ChatViewCell send]
执行什么操作?
我会这样做的:
首先在表视图控制器类中声明两个数组。第一个用于存储消息文本,第二个用于存储单元格高度。您还可以创建一些结构来存储这些值。用户输入完消息后,您应该以某种方式估计单元格高度,并将高度和单元格的消息放入适当的数组。之后,您应该使用insertRowsAtIndexPaths:withRowAnimation:
方法在表格视图中插入新的行(部分)。
然后在你的cellForRowAtIndexPath方法中:
如果dequeueReusableCellWithIdentifier返回nil,则应该初始化新的ChatViewCell,并在if (cell == nil)
语句从适当的数组设置其消息后(由于重用,您应该在每次进入屏幕时设置单元格的内容)。
在heightForRowAtIndexPath:
方法中,从存储单元格高度的数组返回值。