iOS: UITableViewCell 的动态高度
iOS: Dynamic Height For UITableViewCell
我正在使用 iOS9 XCode7
我需要根据labelText Height
动态改变cell的高度
我用过:
self.tableView.rowHeight=UITableViewAutomaticDimension;
但它不适用于定制电池。
sizetoFit
在 iOS9 中删除。
请提出一些建议。
谢谢
相对于单元格、顶部、底部、左侧和右侧给您的标签约束。
您的单元格大小会随着内容高度的增加而增加。
也让你的标签多行。(通过在属性检查器中将行 属性 设置为 0)
#pragma mark- Menu table Delegates
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;
}
我不太确定这句话的意思(截图会有所帮助):
"I need to change the height of cell Dynamically according to labelText Height"
那么,您有一个 UITableViewCell
,其中包含一个 UILabel
,并希望 table 中的每个单元格的高度取决于该单元格的标签?
这是我使用的代码。
在我的UITableViewCell
class中,我将定义一个静态函数来测量,return我的.xib文件的高度:
@implementation MikesTableViewCell
...
+(CGSize)preferredSize
{
static NSValue *sizeBox = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Assumption: The XIB file name matches this UIView subclass name.
NSString* nibName = NSStringFromClass(self);
UINib *nib = [UINib nibWithNibName:nibName bundle:nil];
// Assumption: The XIB file only contains a single root UIView.
UIView *rootView = [[nib instantiateWithOwner:nil options:nil] lastObject];
sizeBox = [NSValue valueWithCGSize:rootView.frame.size];
});
return [sizeBox CGSizeValue];
}
@end
然后,在我的 UIViewController
class 中,我会告诉我的 UITableView
使用这个单元格,找出它的高度。
@property (nonatomic) float rowHeight;
UINib *cellNib = [UINib nibWithNibName:@"MikesTableViewCell" bundle:nil];
[self.tableView registerNib:cellNib forCellReuseIdentifier:@"CustomerCell"];
rowHeight = [MikesTableViewCell preferredSize].height;
...
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return (float)rowHeight;
}
同样,这可能不是您要找的,但我希望这对您有所帮助。
试试这个。
就是这么简单。
在 heightForRowAtIndexPath 方法中设置此高度
float vendorNameHeight = [vendorNameLbl.text heigthWithWidth:width andFont:[UIFont fontWithName:@"Signika-Light" size:21.0]];
然后
UILabel*vendorNameLbl=[[UILabel alloc]initWithFrame:CGRectMake( 13, 11, 100, 22)];
vendorNameLbl.numberOfLines = 0;
[vendorNameLbl sizeToFitVertically];
我正在使用 iOS9 XCode7 我需要根据labelText Height
动态改变cell的高度我用过:
self.tableView.rowHeight=UITableViewAutomaticDimension;
但它不适用于定制电池。
sizetoFit
在 iOS9 中删除。
请提出一些建议。 谢谢
相对于单元格、顶部、底部、左侧和右侧给您的标签约束。
您的单元格大小会随着内容高度的增加而增加。
也让你的标签多行。(通过在属性检查器中将行 属性 设置为 0)
#pragma mark- Menu table Delegates
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;
}
我不太确定这句话的意思(截图会有所帮助):
"I need to change the height of cell Dynamically according to labelText Height"
那么,您有一个 UITableViewCell
,其中包含一个 UILabel
,并希望 table 中的每个单元格的高度取决于该单元格的标签?
这是我使用的代码。
在我的UITableViewCell
class中,我将定义一个静态函数来测量,return我的.xib文件的高度:
@implementation MikesTableViewCell
...
+(CGSize)preferredSize
{
static NSValue *sizeBox = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Assumption: The XIB file name matches this UIView subclass name.
NSString* nibName = NSStringFromClass(self);
UINib *nib = [UINib nibWithNibName:nibName bundle:nil];
// Assumption: The XIB file only contains a single root UIView.
UIView *rootView = [[nib instantiateWithOwner:nil options:nil] lastObject];
sizeBox = [NSValue valueWithCGSize:rootView.frame.size];
});
return [sizeBox CGSizeValue];
}
@end
然后,在我的 UIViewController
class 中,我会告诉我的 UITableView
使用这个单元格,找出它的高度。
@property (nonatomic) float rowHeight;
UINib *cellNib = [UINib nibWithNibName:@"MikesTableViewCell" bundle:nil];
[self.tableView registerNib:cellNib forCellReuseIdentifier:@"CustomerCell"];
rowHeight = [MikesTableViewCell preferredSize].height;
...
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return (float)rowHeight;
}
同样,这可能不是您要找的,但我希望这对您有所帮助。
试试这个。 就是这么简单。
在 heightForRowAtIndexPath 方法中设置此高度
float vendorNameHeight = [vendorNameLbl.text heigthWithWidth:width andFont:[UIFont fontWithName:@"Signika-Light" size:21.0]];
然后
UILabel*vendorNameLbl=[[UILabel alloc]initWithFrame:CGRectMake( 13, 11, 100, 22)];
vendorNameLbl.numberOfLines = 0;
[vendorNameLbl sizeToFitVertically];