我想知道是否可以使UITableView的一部分的高度页眉/页脚等于页眉/页脚标题文本的高度。任何提示都会很棒!
注意:我的TableView的某些部分可能没有页眉/页脚,在这种情况下,部分之间只有填充,因为在这种情况下“headerTitleHeight / footerTitleHeight”将为零。
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return headerTitleHeight + padding;
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return footerTitleHeight + padding;
}
答案 0 :(得分:12)
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
NSString *myHeader = [sectionsArray objectAtIndex:section];
CGSize maxSize = CGSizeMake(320, 999999.0);
int height = 0;
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
font, NSFontAttributeName,
nil];
if (IS_IOS_6) //Macro i made for if iOS 6
{
CGSize size = [myHeader sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:(15)]
constrainedToSize:maxSize
lineBreakMode:NSLineBreakByWordWrapping];
height = size.height;
}
else // IOS 7 , Attributes
{
CGRect frame = [myHeader boundingRectWithSize:maxSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributesDictionary
context:nil];
height = frame.size.height;
}
return height+5;
}
答案 1 :(得分:5)
你可以
return UITableViewAutomaticDimension;
编辑:哎呀,忽略以下内容,请参阅下面的评论。
或
return UITableViewAutomaticDimension + padding;
答案 2 :(得分:2)
你可以自动尺寸,但你必须有估计的尺寸。它以同样的方式适用于Footer和Header。
func tableView(_ tableView: UITableView, estimatedHeightForFooterInSection section: Int) -> CGFloat {
return 300
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return UITableViewAutomaticDimension
}
答案 3 :(得分:1)
计算文字大小并添加填充高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
CGFloat headerTitleHeight = [jobTitleString sizeWithFont:[UIFont fontWithName:@"OpenSans-Light" size:20.0f] constrainedToSize:CGSizeMake(width,9999)].height;
return headerTitleHeight + padding;
}
答案 4 :(得分:0)
您可以使用boundingRectWithSize方法获取为页眉/页脚绘制特定NSString所需的高度,然后返回UITableView委托方法中的值。对于没有页眉页脚的部分,您必须编写代码才能返回填充。
答案 5 :(得分:0)
你可以尝试以下..
CGSize constraint = CGSizeMake(<header/footer width>, <max header/footer height>);
CGSize size;
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
NSRange range = NSMakeRange(0, [<string> length]);
NSDictionary *attributes = [<string> attributesAtIndex:0 effectiveRange:&range];
CGSize boundingBox = [<string> boundingRectWithSize:constraint options: NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;
size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));
}
else
{
size = [<string> sizeWithFont:descriptionLabel.font constrainedToSize:constraint lineBreakMode:descriptionLabel.lineBreakMode];
}
return size.height + padding;
或
CGSize maximumLabelSize = CGSizeMake(<header/footer width>, <max header/footer height>);
CGSize expectedSize = [<string label> sizeThatFits:maximumLabelSize];
return expectedSize.height + padding;
答案 6 :(得分:0)
在viewDidLoad
,heightForFooterInSection
和heightForHeaderInSection
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.estimatedSectionFooterHeight = 50; // for footer
self.tableView.estimatedSectionHeaderHeight = 50; // for header
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return UITableViewAutomaticDimension;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return UITableViewAutomaticDimension;
}
在页脚/页眉xib文件中
- 为您的ContainerView
添加 BOTH约束顶部和底部至UILabel
- 添加UILabel约束高度,然后从Equal
- >更改UILabel约束高度Greater than or Equals
- 最终将UILabel线更改为0