我已经在这个问题上摆弄了好几天了,而且我似乎无法做到这一点。
我正在尝试构建一个看起来类似于以下模型的UITableView:
据我所知,这是在UI上展示它的最佳方式。然而,无论我尝试什么,我似乎无法获得单元格的高度(对于GetHeightForRow方法)。
加载和添加视图不是问题,问题在于它们被加载后,用数据填充不同的UI元素,并获得它们的大小。
我尝试过使用SizeToFit,但它似乎唯一影响的元素是UILabels。即使当UILabel的框架变为300高度并且我在包含标签的UI上调用SizeToFit时,它(UIView)仍然保持在320x100。这意味着当它被渲染时,它看起来都错了。
我试图计算高度的方式与https://stackoverflow.com/a/18746930/2520789上接受的答案的第4点非常相似。也就是说,在内存中创建一个单元格,并为每行填充数据,然后在该单元格上获取高度。
答案 0 :(得分:0)
使用此
-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{
CGSize constraint = CGSizeMake(textWidth, 20000.0f);
CGRect rect = [text boundingRectWithSize:constraint
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]}
context:nil];
CGFloat height = rect.size.height;
height = ceilf(height);
// NSLog(@"height %f", height);
return height;
}
答案 1 :(得分:0)
为每个单元格添加一个ContentHOlderview,并使用VFL(可视化格式语言)编程将ContentHolderView的所有内容ping到单元格ContentView。
现在你可以通过VFL将所有内容叠加在其他程序之上。
3.在heightForRowIndex委托方法中,如果每个xib元素的高度都是固定的,那么返回值(将是所有xib高度的总和,并且它必须在配置每个单元格时进行计算)
配置单元格时按照以下方法确定每个项目的高度。
GSize constraint = CGSizeMake(200,20000.0f); CGRect rect = [Celltext boundingRectWithSize:constraint 选项:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) 属性:@ {NSFontAttributeName:[UIFont systemFontOfSize:14]} 上下文:无]; CGFloat height = rect.size.height;
您需要通过为每个子视图应用相同的逻辑来查找每个单元格的总高度。
答案 2 :(得分:0)
当我在你的评论中读到你不需要支持iOS 8.0以下时,你不需要手动指定行高。您可以这样做,当您使用AutoLayout时,它将自动使您的布局高度。
this.TableView.EstimatedRowHeight = 600;
this.TableView.RowHeight = UITableView.AutomaticDimension;
红色xib里面的蓝色布局是什么?我以前从不使用xib,但是对于使用自动布局,您需要在单元格中定义底部和顶部边距