ios - uitableviewcontroller - uitableviewdelegate




Устраните дополнительные разделители ниже UITableView (20)

Когда я настраиваю табличное представление с 4 строками, все еще есть дополнительные разделительные линии (или дополнительные пустые ячейки) под заполненными строками.

Как удалить эти ячейки?


Конструктор интерфейсов (iOS 9+)

Просто перетащите UIView в таблицу. В раскадровке он будет сидеть наверху ваших пользовательских ячеек. Вы можете назвать его «нижним колонтитулом».

Здесь для ясности он показан зеленым, вам, вероятно, нужен чистый цвет.

Обратите внимание, что, регулируя высоту, вы можете повлиять на то, как обрабатывается «нижний отскок» таблицы, как вы предпочитаете. (Высота нуля обычно тонкая).

Сделать это программно:

стриж

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.tableFooterView = UIView()
}

Objective-C

iOS 6.1+

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // This will remove extra separators from tableview
    self.tableView.tableFooterView = [UIView new];
}

или, если хотите,

    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

Исторически в iOS:

Добавить в контроллер табличного представления ...

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     // This will create a "invisible" footer
     return CGFLOAT_MIN;
 }

и при необходимости ...

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{        
    return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}

Быстрое расширение 4.0

Просто небольшое расширение для раскадровки:

extension UITableView {
    @IBInspectable
    var hideSeparatorForEmptyCells: Bool {
        set {
            tableFooterView = newValue ? UIView() : nil
        }
        get {
            return tableFooterView == nil
        }
    }
}

Для Свифта:

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
    }

Быстро и легко Swift 4 пути.

override func viewDidLoad() {
     tableView.tableFooterView = UIView(frame: .zero)
}

Если у вас есть статические ячейки. Вы также можете отключить разделитель от окна «Инспектор». (это не желательно, если вам нужен разделитель. В этом случае используйте метод, показанный выше)


Вот еще один способ сделать это с использованием стиля сгруппированной таблицы, и вы, вероятно, не догадаетесь. Добавление верхнего и нижнего колонтитула в таблицу (возможно, один или другой из них недостаточно проверено) заставляет разделители исчезать из строк заливки / пустых строк.

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

- (void) addHeaderAndFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.myTableView setTableHeaderView:v];
    [self.myTableView setTableFooterView:v];
    [v release];
}

В ответ на @Casebash я вернулся к коду в своем приложении («Менеджер списка AcmeLists» в магазине iTunes ...) и закодировал метод addHeaderAndFooter для проверки. Без этого у меня есть дополнительные разделители строк; с кодом, у меня есть то, что вы видите в этом окне: нет разделителей строк в таблице . Поэтому я не уверен, почему это не сработало бы для вас. Более того, для меня имеет смысл, что наличие какого-либо пользовательского нижнего колонтитула на табличном представлении обязательно должно прекратить рисовать разделители строк для пустых строк под ним. Это было бы отвратительно. Для справки я просматривал таблицы, где было больше строк, чем можно было бы просмотреть на экране, а затем для таблицы с двумя строками. В обоих случаях нет посторонних разделителей.

Возможно, ваши пользовательские представления не были добавлены. Чтобы проверить это, установите цвет фона для чего-то другого, кроме clearColor , например [UIColor redColor] . Если вы не видите красные полосы внизу таблицы, нижний колонтитул не установлен.


Вы можете просто добавить пустой нижний колонтитул в конце, тогда он скроет пустые ячейки, но он также будет выглядеть довольно уродливым:

tableView.tableFooterView = UIView()

Существует лучший подход: добавьте 1-точечную строку в конце представления таблицы, так как нижний колонтитул и пустые ячейки также больше не будут показаны.

let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView


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

В UITableViewDelegate :

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

Если вы используете Swift, добавьте следующий код для просмотраDidLoad контроллера, который управляет табличным представлением:

override func viewDidLoad() {
    super.viewDidLoad()

    //...

    // Remove extra separators
    tableView.tableFooterView = UIView(frame: CGRectZero)
}

Если у вас есть панель поиска в вашем представлении (чтобы ограничить количество результатов, например), вы также должны добавить следующее в shouldReloadTableForSearchString и shouldReloadTableForSearchScope:

controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];

Если у вас есть только один раздел, самым быстрым и простым способом является просто установить стиль Table View с «Plain» на «Grouped». (см. изображение)

Если у вас больше секций, вам может потребоваться установить высоту заголовка в ноль (в зависимости от вкуса вашего клиента / вашего менеджера проекта)

Если у вас есть больше разделов и вы не хотите связываться с заголовками (даже если это всего лишь одна строка в простейшем случае), вам нужно установить UIView как нижний колонтитул, как было объяснено в предыдущих ответах)


Попробуй это

self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];

Попробуй это. Это сработало для меня:

- (void) viewDidLoad
{
  [super viewDidLoad];

  // Without ARC
  //self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];

  // With ARC, tried on Xcode 5
  self.tableView.tableFooterView = [UIView new];
}

Просто добавьте представление с желаемым цветом разделителя в качестве цвета фона, ширину 100%, высоту 1 пиксель в позиции x0 y-1 для вашего TableViewCell. Убедитесь, что tableViewCell не поддерживает клип-объекты, а tableView должен.

Таким образом, вы получаете абсолютный простой и рабочий разделитель только между существующими ячейками без какого-либо взлома кода или IB.

Примечание. При вертикальном верхнем отскоке появляется первый разделитель, но это не должно быть проблемой, потому что это поведение по умолчанию iOS.


Удаление дополнительных разделительных строк для пустых строк в UITableView в Swift

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTableview.tableFooterView = UIView()
}

Я добавил это небольшое расширение таблицы, которое помогает во всем

extension UITableView {
     func removeExtraCells() {
         tableFooterView = UIView(frame: .zero)
     }
}

Я знаю, что этот вопрос принят, но я добавил разные способы скрытия дополнительной разделительной строки UITableView .

Вы можете скрыть стандартную разделительную линию tableView и добавить свою собственную строку вверху каждой ячейки.

Обновить:

Самый простой способ добавить пользовательский разделитель - добавить простой UIView высотой 1px:

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];

ИЛИ ЖЕ

    self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
    self.tblView.delegate=self;
    self.tblView.dataSource=self;
    [self.view addSubview:self.tblView];

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.tblView setTableHeaderView:v];
    [self.tblView setTableFooterView:v];
    [v release];

ИЛИ ЖЕ

- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // This will create a "invisible" footer
    return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    // To "clear" the footer view
    return [[UIView new] autorelease];
}

ИЛИ Лучший и простой способ, которым я когда-либо был

self.tableView.tableFooterView = [[UIView alloc] init];

Попробуйте любой из них;


Я просто добавляю эту строку в функцию ViewDidLoad и исправленную проблему.

tableView.tableFooterView = [[UIView alloc] init]; 

Я хотел бы расширить wkw ответ:

Просто добавление только нижнего колонтитула с высотой 0 сделает трюк. (проверено на sdk 4.2, 4.4.1)

- (void) addFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectZero];

    [self.myTableView setTableFooterView:v];
}

или даже проще - если вы настроили свой табличный вид, добавьте эту строку:

//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];

или даже проще - просто удалить любые разделители:

[_tableView setTableFooterView:[UIView new]];

Благодаря wkw снова :)


просто добавьте этот код ( Swift ). ,

tableView.tableFooterView = UIView()

UIKit не создает пустую ячейку, когда tableView имеет tableFooterView . Поэтому мы можем сделать трюк и назначить объект UIView с нулевой высотой как нижний колонтитул tableView .

tableView.tableFooterView = UIView()




cocoa-touch