我无法使用 NSAttributedStrings 从 UITableViewCell 中的 UITextViews 获得一致的结果。
内部 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
headerText = [[UITextView alloc]initWithFrame:CGRectZero];
[headerText setUserInteractionEnabled:NO];
headerText.tag = HEADER_TEXT;
[cell.contentView addSubview:headerText];
} else {
headerText = (UITextView*)[cell.contentView viewWithTag:HEADER_TEXT];
}
//...setting up attributed strings
[headerText setAttributedText:headerString];
CGSize headerSize = [headerText sizeThatFits:CGSizeMake(246, CGFLOAT_MAX)];
headerText.frame = CGRectMake(45, 8, headerSize.width, headerSize.height);
结果:
如您所见,前两个似乎以我期望/想要的方式绘制文本。在最后两个中,UITextView sizeThatFits 方法返回一个更大的大小,然后需要绘制文本,并且文本在框架中居中,而不是紧贴在框架的顶部。这是一个问题,因为我希望能够根据 uitextview 框架高度来布局其他视图。
滚动出框架并返回后:
现在它变得更奇怪了,当单元被重用时,属性字符串又被设置了。uitextview 以不一致的方式绘制文本。
甚至将 contentInsets 设置为
headerText.contentInset = UIEdgeInsetsMake(-8, -8, -8, -8);
不提供任何一致的结果:
并在使用 contentinset 集滚动后:
UITextView 上是否还有其他属性可以让我获得所需的行为?