因为我发现AutoLayout
我到处都使用它,现在我正在尝试使用它tableHeaderView
.
我做了subclass
一些UIView
添加的东西(标签等......)我想要他们的约束,然后我把它添加CustomView
到UITableView
' tableHeaderView
.
一切都工作得很好,除了UITableView
总是显示上面的CustomView
,通过以上我指的CustomView
是下的UITableView
,因此它不能被看到!
看来,无论我做什么,对height
的UITableView
" tableHeaderView
是始终 0(所以是宽度,x和y).
我的问题:如果不手动设置框架,是否可以完成此操作?
编辑:我正在使用
的CustomView
' subview
有这些限制:
_title = [[UILabel alloc]init];
_title.text = @"Title";
[self addSubview:_title];
[_title keep:[KeepTopInset rules:@[[KeepEqual must:5]]]]; // title has to stay at least 5 away from the supperview Top
[_title keep:[KeepRightInset …
Run Code Online (Sandbox Code Playgroud) 在过去的3到4个小时里,我一直把头撞在墙上,我似乎无法弄明白.我有一个UIViewController,里面有一个全屏UITableView(屏幕上有一些其他的东西,这就是为什么我不能使用UITableViewController)我想让我的tableHeaderView用autolayout调整大小.不用说,它不合作.
见下面的截图.
因为overviewLabel(例如"此处列出概述信息."文本)具有动态内容,所以我使用autolayout来调整它的大小和它的超级视图.除了tableHeaderView之外,我已经很好地调整了所有内容,它位于层次结构中的Paralax Table View之下.
我发现调整标题视图大小的唯一方法是以编程方式,使用以下代码:
CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = headerFrameHeight;
self.headerView.frame = headerFrame;
[self.listTableView setTableHeaderView:self.headerView];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,headerFrameHeight是tableViewHeader高度的手动计算,如下所示(innerHeaderView是白色区域,或者第二个"View",headerView是tableHeaderView):
CGFloat startingY = self.innerHeaderView.frame.origin.y + self.overviewLabel.frame.origin.y;
CGRect overviewSize = [self.overviewLabel.text
boundingRectWithSize:CGSizeMake(290.f, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName: self.overviewLabel.font}
context:nil];
CGFloat overviewHeight = overviewSize.size.height;
CGFloat overviewPadding = ([self.overviewLabel.text length] > 0) ? 10 : 0; // If there's no overviewText, eliminate the padding in the overall height.
CGFloat headerFrameHeight = ceilf(startingY + overviewHeight + overviewPadding + 21.f + 10.f);
Run Code Online (Sandbox Code Playgroud)
手动计算有效,但如果将来发生变化,它会很笨拙并容易出错.我想要做的是让tableHeaderView根据提供的约束自动调整大小,就像你可以在其他地方一样.但对于我的生活,我无法弄明白.
关于这个问题有几个关于此的帖子,但没有一个是明确的,最后让我更加困惑.这里有几个:
我有一个UIView
包含多行的子类UILabel
.此视图使用autolayout.
我想设置该视图为tableHeaderView
的UITableView
(不是一节头).此标题的高度取决于标签的文本,而标签的文本又取决于设备的宽度.那种场景自动布局应该很棒.
我发现并尝试了 许多 解决方案来实现这一点,但无济于事.我试过的一些事情:
preferredMaxLayoutWidth
在期间为每个标签设置一个layoutSubviews
intrinsicContentSize
tableHeaderView
手动设置框架.我遇到的一些各种失败:
Auto Layout still required after executing -layoutSubviews
解决方案(或解决方案,如有必要)应适用于iOS 7和iOS 8.请注意,所有这些都是以编程方式完成的.我已经设置了一个小型示例项目,以防您想要查看问题.我已将我的努力重置到以下起点:
SCAMessageView *header = [[SCAMessageView alloc] init];
header.titleLabel.text = @"Warning";
header.subtitleLabel.text = @"This is a message with enough text to span multiple lines. This text is set at runtime and might be short or long.";
self.tableView.tableHeaderView = header; …
Run Code Online (Sandbox Code Playgroud) 我的故事板大小和iPhone模拟器上实际显示的大小有问题.有任何想法吗?
大家好我有一个TableHeaderView,一切都由Autolayout管理:
的UIImageView
在顶部应始终为2:1,所以我设置纵横比和所需约束的其余部分.
4 UIButtons
应该始终是水平的,并且应该具有相同的高度和宽度.所以我使用Equal Width和Equal Height,并且纵横比为1:1
和我有两个UILabels
与numberOfLines
设置为0.我也把我的子类UILabel
,因为preferredMaxLayoutWidth
,这样的:
- (void) layoutSubviews
{
[super layoutSubviews];
if ( self.numberOfLines == 0 )
{
if ( self.preferredMaxLayoutWidth != self.frame.size.width )
{
self.preferredMaxLayoutWidth = self.frame.size.width;
[self setNeedsUpdateConstraints];
}
}
}
Run Code Online (Sandbox Code Playgroud)这是我的代码:
- (void)initializeHeaderViewLabels
{
//After the Response from my server arrived i set the tableHeaderView with the Textdata
self.tableView.tableHeaderView = nil;
if((self.contentDict[@"title"]) != [NSNull null])
{
self.headerTitleLabel.text = (self.contentDict[@"title"]);
}
if((self.contentDict[@"shortDescription"]) != [NSNull null]) …
Run Code Online (Sandbox Code Playgroud) ios ×4
uitableview ×4
autolayout ×3
iphone ×2
ios7 ×1
ipad ×1
objective-c ×1
simulator ×1
size ×1
storyboard ×1
uiview ×1
xcode ×1