我在使用NSAttributedStrings在UITableViewCell中的UITextView上获取一致的结果方面遇到了困难。
在 - (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上是否还有其他属性可以让我获得所需的行为?