Удалить SeparatorInset на iOS 8 UITableView для Xcode 6 iPhone Simulator


Я нашел странное белое пространство на UITableView на симулятор iPhone 6 (iOS 8) на XCode 6 GM. Я попытался установить SeparatorInset из обоих раскадровки, а также код, но пустое пространство до там.

следующий код работает на iOS 7, но не на iOS 8 (iPhone 6 simulator).

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }
}

я прикрепил снимок экрана ниже:

Я использую AutoLayout кстати. Я надеюсь, что кто-то может показать мне способ удалить странный белый место на TableView.

14 61

14 ответов:

спасибо студенту за указание мне в правильном направлении с комментарием"попробовать это самостоятельно.myTableView.layoutMargins = UIEdgeInsetsZero;" эта строка кода будет работать только на iOS 8, потому что layoutMargins доступно только с iOS 8. Если я запускаю тот же код на iOS 7, он рухнет.

@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

enter image description here

Ниже приведен правильный ответ, чтобы решить эту странную пробел, установив tableview layoutMargins и cell layoutMargins как UIEdgeInsetsZero если он существует (для iOS 8). И это не будет сбой на iOS 7, а также.

-(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];
   }
}

смотрите снимок экрана ниже: -

enter image description here

попробуйте создать Категорию класса UITableViewCell и добавить этот геттер

- (UIEdgeInsets)layoutMargins {
    return UIEdgeInsetsZero;
}

в iOS7 это не будет называться, потому что нет этого свойства в SDK,и не вызовет никакого сбоя; в iOS8 это будет вызываться каждый раз, когда вы используете ячейку

это работает для меня

мое решение всего с тремя строками кода:

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)row{
    //
    // ... your code ...
    //
    if ([cell respondsToSelector:@selector(preservesSuperviewLayoutMargins)]){
        cell.layoutMargins = UIEdgeInsetsZero;
        cell.preservesSuperviewLayoutMargins = false;
    }
    return cell;
}

IOS8 ввести новую концепцию под названием Настройка Полей Содержание новое свойство с именем layoutMargins также вводится, для получения подробной информации о собственности, пожалуйста, обратитесь к Apple Doc . Тип layoutMargins и UIEdgeInsets по умолчанию значение равно {8,8,8,8} . Чтобы удалить разделитель строки TableView в IOS8, в дополнение к set tableView.seperatorInset = UIEdgeInsetsZero, вы также должны сделать, как :

сначала определите макрос

#define isIOS8SystemVersion (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1)

в методе UITableViewDelegate добавить:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
         static NSString *reuseId = @"cellReuseID" ;
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
         if(!cell){
             cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseId];     
         if(isIOS8SystemVersion){   
             cell.layoutMargins = UIEdgeInsetsZero;
             cell.preservesSuperviewLayoutMargins =NO ;
         }

    }

выполнение этих действий приведет к удалению линии разделителя . Вы также можете сделать следующее:

    UITableView *tableView = [[UITableView alloc] init];
    if(isIOS8SystemVersion){
         tableView.layoutMargins = UIEdgeInsetsZero ;
    }

и в методе UITableViewDelegate добавить :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *reuseId = @"cellReuseID" ;
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
     if(!cell){
         cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseId];     
     if(isIOS8SystemVersion){   
         cell.layoutMargins = UIEdgeInsetsZero;
     }
}

в моем случае в Xcode 6.2, в дополнение к ответу Will Q, я должен перейти к Main.раскадровка > выберите UITableViewCell > инспектор атрибутов. Измените выпадающий список разделителей с вкладок по умолчанию на Пользовательские Вставки. Измените левую вставку с 15 на 0.

enter image description here

обходной путь для iOS 7 и iOS 8

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    cell.separatorInset = UIEdgeInsetsMake(0.0f, cell.frame.size.width, 0.0f, 0.0f); 
}

в iOS8 вы должны установить вставку и на строке и на уровне таблицы.

уровень строки в cellForRowAtIndexPath:

if ([cell respondsToSelector:@selector(preservesSuperviewLayoutMargins)]){
    cell.layoutMargins = UIEdgeInsetsZero;
    cell.preservesSuperviewLayoutMargins = false;
}

уровень таблицы в viewDidLoad:

[tableReference setSeparatorInset:UIEdgeInsetsZero];

после этого это хорошая идея, чтобы очистить ваш проект. В некоторых случаях я отметил, что эти изменения не были непосредственно введены в исполняемом приложении в симуляторе.

для iOS 8

попробуйте установить cell.layoutMargins = UIEdgeInsetsZero; на cellForRowAtIndexPath метод

Если вы хотите удалить белую линию, но сохранить вставку разделителя, как она есть, просто установите ячейку.backgroundColor к TableView backgroundColor. Просто устанавливаю камеру.странице просмотр содержимого.фон не сделать проблема исчезнет.

Я пробовал много способов, ни один из них не работает, но это работает для меня.

 WORK FOR ME

добавить загрузочные изображения для iPhone 6 и Plus. Перед добавлением изображений телефон работает в режиме масштабирования, т. е. старые приложения масштабируются в соответствии с новыми размерами экрана. Это может быть причиной линий. Новые изображения Retina HD 5.5 (iPhone6Plus) 1242x2208 и Retina HD 4.7 (iPhone6) 750x1334.

посмотреть iOS 8 UITableView разделитель вставка 0 не работает

в принципе, вам нужно установить обе ячейки.layoutMargin, а также layoutMargin tableView. YMMV, но я должен был установить вид таблицы в layoutSubviews, прежде чем он будет работать!

чтобы сделать ваши вставки разделителя UITableView равными нулю для iOS7 и iOS8, вместо того, чтобы вносить изменения в код, внесите изменения в xib для UITableView, изменив вид->режим->заполнение аспекта.

у меня статический!--1--> и хотел сдвинуть край разделителя ячеек к левому краю.

благодаря вышеприведенным ответам, это было мое решение

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    // needed to shift the margin a specific cell to the left edge
    if indexPath.section == 3 && indexPath.row == 0 {
        cell.layoutMargins = UIEdgeInsetsZero
        cell.preservesSuperviewLayoutMargins = false
        cell.separatorInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0)
    }
}