假设我有一个简单的tableViewCell
只有一个视图(UILabel
)而tableView
有10行,label
在不同位置的文字从1到3不等行,现在在cellForRowAtIndexPath
cellForRowAtIndexPath{
[MyCell* cell = _tableView.dequeueReusableCellWithIdentifier:@"MyCell"];
cell.label.text = [stringArray objectAtIndex:indexPath.row];
}
现在我想将cornerRadius
添加到与该标签的高度成比例的label
(例如,角半径是标签高度的一半)
label.layer.cornerRadius = label.frame.size.height/2;
现在我的问题是我在哪里设置标签的这个角半径?
cellForRowAtIndexPath
,但我的身高值出错了我试图像这样覆盖MyCell类中的layoutForSubViews
。
-(void)layoutSubviews{
[super layoutSubviews];
self.label.layer.cornerRadius = self.label.frame.size.height/2;
}
但我的身高值仍然是错误的
我尝试在tableView的-willDisplayCell
回调中执行此操作但仍然错误的高度
唯一似乎有效的方法是覆盖单元格的drawRect
并指定cornerRadius
。这是唯一的方法吗?
答案 0 :(得分:1)
您也可以尝试使用[cell.label sizeToFit];
并在此之后访问框架,例如在cellForRowAtIndex路径中。
但是适合的尺寸会导致布局错误。
此外,@ DSDharma注释应该很有用,但您需要在UITableViewCell子类中重写- (void) layoutSubviews
。这应该工作。
答案 1 :(得分:0)
您可以在sizeForItemAtIndexPath中获得正确的UITableViewCell标签高度。
使用以下代码
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
NSMutableDictionary *currentObject = [yourMutableArray objectAtIndex:indexPath.row];
NSString *datum = [currentObject valueForKey:@"yourKeyName"];
CGSize size = [datum boundingRectWithSize:CGSizeMake(self.view.bounds.size.width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont fontWithName:@"yourFontFamily" size:16]} context:nil].size;
return size;
}
答案 2 :(得分:0)
使用以下代码获取标签高度。
- (CGFloat)getLabelHeight:(UILabel*)label
{
CGSize constraint = CGSizeMake(label.frame.size.width, 999);
CGSize size;
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGSize boundingBox = [label.text boundingRectWithSize:constraint
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:label.font}
context:context].size;
size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));
return size.height;
}
答案 3 :(得分:0)
要计算尺寸Subscriber
,请使用此方法。
示例:强>
sizeWithFont constrainedToSize:lineBreakMode:
并将// FLT_MAX here simply means no constraint in height
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];
//update label with new Height
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
设为CornerRadius
值