Intereting Posts
Невозможно установить имя пользовательского класса FBSDKAppInvite call back не попадает в ios Push-уведомление не отправляется с моего устройства – Parse Разработка IOS и цель C – как сделать страницу входа пользователем? MVC Design Pattern – Может ли контроллер иметь несколько видов, имеющих собственный контроллер? Наблюдать за уведомлениями клавиатуры * только * от UITextView? Передача параметра UITextView в «объект» не работает Команда /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc не выполнена с кодом выхода 1 Как показать google admob в пользовательской клавиатуре для iOS? Количество отображаемых строк для UILabel с фиксированной шириной и NSAttributedString Facebook Войти swift Нет такого модуля Ошибка iOS при инициализации массива Мимическое поведение двойного нажатия UITextView по умолчанию Изображение от UIImagePicker до NSMutableArray Как вы создаете изменчивые изображения заголовков для iOS в Photoshop? MKPointAnnotation с изображением, вставка аннотации через Button, изображение не появляется

Устранить разделитель tablefooterview uitableview

У меня есть uitableview с tablefooterview. Я хотел бы использовать разделители ячеек в представлении таблицы, но хотел бы избавиться от разделителя ширины полного экрана, помещенного по умолчанию между tableview и tablefooterview. я пытался

if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } 

а также

 cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0); 

но не работает

Взгляните на эту примерную реализацию.
Вы можете видеть, что UITableView с plain стилем действительно освобождает последний разделитель, если установлен footerView.

(Оранжевый вид – это footerView, и над ним нет разделителя)
Конечно, в Grouped tableView это не работает, как обсуждалось в комментариях по вашему вопросу.

введите описание изображения здесь

https://gist.github.com/bartekchlebek/2b05b5ddcc3efec3f514

 #import "ViewController.h" @interface ViewController () <UITableViewDataSource> @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; tableView.dataSource = self; tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 40)]; footerView.backgroundColor = [UIColor orangeColor]; tableView.tableFooterView = footerView; [self.view addSubview:tableView]; } #pragma mark - UITableViewDataSource - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ID"]; cell.textLabel.text = [NSString stringWithFormat:@"Row: %@", @(indexPath.row)]; return cell; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 20; } @end 

Изменить: я обнаружил, что гораздо более простой способ избежать разрыва между последней секцией и нижним колонтитулом таблицы – реализовать heightForFooterInSection и вернуть очень маленькое значение, которое не равно 0. Это приведет к тому, что ничего не будет видно.

По какой-то причине возврат 0 не подавляет рендеринг нижних колонтитулов раздела в виде таблицы сгруппированным стилем, и он попытается отобразить нижний колонтитул с 1 точкой. Есть еще одна дискуссия о StackOverflow об этом.

 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return CGFLOAT_MIN; } 

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

Мой взлом – просто разместить фактическое представление нижнего колонтитула, которое вы хотите внутри представления обертки, с позицией кадра (0, -1).

Допустим, у вас есть представление нижнего колонтитула таблицы, которое вы хотите использовать, класс MyTableFooterView.

В этом случае вы можете сделать что-то вроде этого:

 //This is the view we will actually add as the table footer //We make it one point shorter since the content will be shifted up //one point out of its frame CGRect footerFrame = CGRectMake(0, 0, self.tableView.width, myFooterHeight-1); UIView* tableFooterWrapper = [[UIView alloc] initWithFrame:footerFrame]; //This is the view that we are trying to use as a table footer. //We place it 1 point up inside the wrapper so it overlaps that pesky 1-point separator. CGRect contentFrame = CGRectMake(0, -1, self.tableView.width, myFooterHeight); UIView* footerContent = [[MyTableFooterView alloc] initWithFrame:contentFrame]; //Make sure the footer expands width for to other screen sizes footerContent.autoresizingMask = UIViewAutoresizingFlexibleWidth; [tableFooterWrapper addSubview:footerContent]; self.tableView.tableFooterView = tableFooterWrapper; 

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

Используйте следующий код

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