Jeg har en app der UITableView
' s separatorinnsats er satt til egendefinerte verdier - Høyre 0
, Venstre 0
. Dette fungerer perfekt i iOS 7.x
, men i iOS 8.0
ser jeg at skillelinjen er satt til standardverdien 15
til høyre. Selv om det i xib-filene er satt til 0
, vises det fortsatt feil.
Hvordan fjerner jeg UITableViewCell
-skillemarginene?
Arg!!! Etter å ha lekt litt, kan du enten gjøre dette i underklassen Cell
:
- (UIEdgeInsets)layoutMargins
{
return UIEdgeInsetsZero;
}
eller å sette cell.layoutMargins = UIEdgeInsetsZero;
løste det for meg.
Jeg tror dette er det samme spørsmålet som jeg stilte her: https://stackoverflow.com/questions/25762723/remove-separatorinset-on-ios-8-uitableview-for-xcode-6-iphone-simulator
I iOS 8 er det en ny egenskap for alle objekter som arver fra UIView
. Så løsningen for å angi SeparatorInset
i iOS 7.x vil ikke kunne fjerne det hvite mellomrommet du ser på UITableView i iOS 8.
Den nye egenskapen heter "layoutMargins".
@property(nonatomic) UIEdgeInsets layoutMargins
Description The default spacing to use when laying out content in the view.
Availability iOS (8.0 and later)
Declared In UIView.h
Reference UIView Class Reference
Løsningen
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[tableView setLayoutMargins:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
Hvis du setter cell.layoutMargins = UIEdgeInsetsZero;
uten å sjekke om layoutMargins
eksisterer, vil appen krasje på iOS 7.x. Så det beste er å sjekke om layoutMargins
eksisterer først før setLayoutMargins:UIEdgeInsetsZero
.
I Swift er det litt mer irriterende fordi layoutMargins
er en egenskap, så du må overstyre getteren og setteren.
override var layoutMargins: UIEdgeInsets {
get { return UIEdgeInsetsZero }
set(newVal) {}
}
Dette vil i praksis gjøre layoutMargins
skrivebeskyttet, noe som i mitt tilfelle er helt greit.