viewForHeaderInSection autolayout - 引脚宽度

时间:2015-01-09 12:01:28

标签: ios objective-c uitableview autolayout

我正在使用UITableView委托方法viewForHeaderInSection在我的UITableView中提供部分标题。

我最初创建一个这样的视图:

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 50)];

然后使用Autolayout添加一些子视图,然后返回headerView

我遇到的问题是我不想具体指定headerView大小。我想使用Autolayout来左侧和左侧右边缘到视图的宽度。这是问题,我没有在Autolayout代码中使用superview。

使用上面的代码表示标题视图不会在旋转时自动调整大小。您必须在轮换后重新加载tableview。

我是如何设置headerView将其边缘固定到tableview的?

由于

1 个答案:

答案 0 :(得分:2)

从我的测试和此回答here开始,该方法返回的UIView自动将其原点设置为(0, 0),其高度设置为{{1}返回的值并将其宽度设置为-tableView: heightForHeaderInSection:的宽度。

我能够向UITableView添加控件,甚至可以使用自动布局将其排除,而无需在UIView方法中指定任何特定大小。

这是我创建标题视图的代码:

init

这是我在标题视图中布置控件的代码:

self.headerView = [[UIView alloc] init];

以下是- (void)layoutControls { [self.headerView addSubview:self.segmentedControl]; [self.headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(margin)-[control]-(margin)-|" options:0 metrics:@{@"margin": @(self.segmentedControlLeftRightMargin)} views:@{@"control": self.segmentedControl}]]; [self.headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(margin)-[control(==height)]" options:0 metrics:@{@"margin": @(self.segmentedControlTopMargin), @"height": @(self.segmentedControlHeight)} views:@{@"control": self.segmentedControl}]]; [self.headerView addSubview:self.searchBar]; [self.headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(margin)-[control]-(margin)-|" options:0 metrics:@{@"margin": @(self.searchBarLeftRightMargin)} views:@{@"control": self.searchBar}]]; [self.headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[control1]-(margin1)-[control2]-(margin2)-|" options:0 metrics:@{@"margin1": @(self.segmentedControlBottomMargin), @"margin2": @(self.searchBarBottomMargin)} views:@{@"control1": self.segmentedControl, @"control2": self.searchBar}]]; } 协议的方法:

UITableViewDelgate