ios7的時候在storyboard 設置 TableView的separator intend = 0 可以讓tableview的分割條頂到頭。
但是,升級了iOS8時,發現不起作用了。
經過google,在 stackoverflow 發現了答案
翻譯紀錄一下
iOS8 在cell和tableview中都引入了layoutMargins屬性,而且這個屬性在iOS 7中並沒有,所以你需要區別對待這兩個版本。
使用 Ricky 的方案設置cell中的layoutMargin屬性:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
//按照作者最後的意思還要加上下面這一段
if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){
[cell setPreservesSuperviewLayoutMargins:NO];
}
}
你還需要在tableview中設置同樣的屬性. 通過多次試驗,我發現你可以在viewDidLayoutSubviews.中設置這個屬性
把下面代碼拷貝到你的view的實現中
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
這樣,在ios7,ios8中都可以實現分割條頂頭的需求了。(譯者:ios6缺省是頂頭的,因此這個方案可以適用於ios6-8).
Edit: 按照 @bffmike 在 Twitter 上所說, 你可能還需要在cell中設置 preservesSuperviewLayoutMargins=NO . 再次說明:每個人的情況因人而異.