Quando configuro uma exibição de tabela com 4 linhas, ainda existem linhas separadoras extras (ou células em branco extras) abaixo das linhas preenchidas.
Como eu removia essas células?
Quando configuro uma exibição de tabela com 4 linhas, ainda existem linhas separadoras extras (ou células em branco extras) abaixo das linhas preenchidas.
Como eu removia essas células?
Respostas:
Basta arrastar um UIView para a tabela. No storyboard, ele fica na parte superior abaixo das células personalizadas. Você pode preferir chamá-lo de "rodapé".
Aqui é mostrado em verde para maior clareza, você provavelmente desejaria cores claras.
Observe que, ajustando a altura, você pode afetar como o "salto inferior" da tabela é tratado, como preferir. (A altura zero geralmente é boa).
Para fazer isso programaticamente:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}
ou se você preferir,
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Adicionar ao controlador de exibição de tabela ...
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}
e se necessário ...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
tableFooterView
deixa um separador na última célula da linha, pois a tabela ainda antecipa o conteúdo abaixo dessa célula. Usar o caminho histórico eliminará o último separador e parecerá melhor em geral.
Aqui está outra maneira de fazer isso sem o estilo de tabela agrupada, e uma que você provavelmente não adivinharia. A adição de um cabeçalho e rodapé à tabela (talvez um ou outro seja suficiente, não foi verificado) faz com que os separadores desapareçam das linhas de preenchimento / em branco.
Eu me deparei com isso porque queria um pouco de espaço na parte superior e inferior das mesas para diminuir o risco de pressionar os botões em vez de uma célula da mesa com dedos carnudos. Aqui está um método para inserir uma exibição em branco como cabeçalho e rodapé. Use a altura que desejar, mas você ainda elimina as linhas separadoras extras.
- (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];
}
Em resposta ao @Casebash, voltei ao código no meu aplicativo (Gerenciador de listas "AcmeLists" na loja iTunes ...) e coloquei um curto-circuito no método addHeaderAndFooter para verificar. Sem ele , tenho os separadores de linha extras; com o código, eu tenho o que você vê nesta janela: não há imagem dos separadores de linhas da tabela . Portanto, não sei por que não teria funcionado para você. Além disso, faz sentido para mim que ter qualquer rodapé personalizado em uma exibição de tabela necessariamente precise parar de desenhar separadores de linhas para linhas em branco abaixo dele. Isso seria horrível. Para referência, observei as tabelas em que havia mais linhas do que as que podiam ser exibidas na tela e, em seguida, uma tabela com duas linhas. Nos dois casos, não há separadores estranhos.
Talvez suas visualizações personalizadas não tenham sido realmente adicionadas. Para verificar isso, defina a cor do plano de fundo para algo diferente de clearColor
, por exemplo [UIColor redColor]
,. Se você não encontrar algumas barras vermelhas na parte inferior da mesa, seu rodapé não estava definido.
Removendo linhas separadoras extras para linhas vazias no UITableView no Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}
Gostaria de estender a resposta wkw :
Simplesmente adicionar apenas rodapé com altura 0 fará o truque. (testado no sdk 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
ou ainda mais simples - onde você configura sua tableview, adicione esta linha:
//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];
ou ainda mais simples - para simplesmente remover qualquer separador:
[_tableView setTableFooterView:[UIView new]];
Graças a wkw novamente :)
Basta arrastar um UIView
para o seu UITableView
como rodapé. Defina a altura da vista do rodapé como 0.
Tente isso. Funcionou para mim:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
Se você estiver usando o Swift, adicione o seguinte código para viewDidLoad do controlador que gerencia a visualização da tabela:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView()
}
Você pode simplesmente adicionar um rodapé vazio no final para ocultar as células vazias, mas também parecerá bastante feio:
tableView.tableFooterView = UIView()
Existe uma abordagem melhor: adicione uma linha de 1 ponto no final da visualização da tabela, pois o rodapé e as células vazias também não serão mais exibidas.
let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView
basta adicionar este código ( Swift ). .
tableView.tableFooterView = UIView()
Avançando a solução de J. Costa: Você pode fazer uma alteração global na tabela colocando esta linha de código:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
dentro do primeiro método possível (geralmente em AppDelegate
, em: application:didFinishLaunchingWithOptions:
método).
Eu sei que esta pergunta foi aceita como resposta, mas coloquei aqui maneiras diferentes de como ocultar a linha separadora extra de UITableView
.
Você pode ocultar tableView
a linha separadora padrão e adicionar sua linha personalizada na parte superior de cada célula.
Atualizar:
A maneira mais fácil de adicionar separador personalizado é adicionar UIView
1px de altura simples :
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];
OU
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];
OU
- (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];
}
OU A melhor e mais simples maneira que eu gosto é
self.tableView.tableFooterView = [[UIView alloc] init];
Tente qualquer um deles;
Você pode encontrar muitas respostas para essa pergunta. A maioria deles manipula UITableView
o tableFooterView
atributo s e essa é a maneira correta de ocultar linhas vazias. Para maior conveniência, criei uma extensão simples que permite ativar / desativar linhas vazias no Interface Builder. Você pode conferir a partir deste arquivo essencial . Espero que possa economizar um pouco do seu tempo.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Uso:
tableView.isEmptyRowsHidden = true
linha separadora extra uitableview ocultar linhas separadoras extras ocultar no swift 3.0
self.tbltableView.tableFooterView = UIView(frame: .zero)
Se você não deseja nenhum separador após a última célula, precisará de uma altura próxima a zero, mas diferente de zero, para o rodapé.
No seu UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Swift funciona muito bem com:
tableView.tableFooterView = UIView()
Basta adicionar uma visualização com a cor desejada do separador como cor de fundo, 100% de largura, 1px de altura na posição x0 y-1 ao seu tableViewCell. Certifique-se de que o tableViewCell não recorte subvisões, mas o tableView deve.
Assim, você obtém um separador absoluto simples e funcional apenas entre as células existentes, sem nenhum hack por código ou IB.
Nota: Em um salto superior vertical, o 1º separador aparece, mas isso não deve ser um problema, pois é o comportamento padrão do iOS.
Para eliminar linhas separadoras extras da parte inferior da UItableview programaticamente, basta anotar as duas linhas de código a seguir e ele removerá o separador extra.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Esse truque funciona para mim o tempo todo, tente você mesmo.
Tive sorte em implementar uma única parte da resposta aceita (iOS 9+, Swift 2.2). Eu tentei implementar:
self.tableView.tableFooterView = UIView(frame: .zero)
No entanto, não houve efeito no meu tableView
- acredito que possa ter algo a ver com o fato de estar usando UITableViewController
.
Em vez disso, só tive que substituir o viewForFooterInSection
método (não configurei o tableFooterView
outro lugar):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Isso funcionou bem para uma tableView
seção única (se você tiver várias seções, precisará especificar a última).
Se você tiver apenas uma seção, a maneira mais rápida e fácil é simplesmente definir o Estilo de exibição de tabela de "Simples" para "Agrupado". (veja a imagem)
Se você tiver mais seções, pode ser necessário definir a altura do cabeçalho como zero (dependendo do gosto do seu / do seu cliente / do seu gerente de projeto)
Se você tiver mais seções e não quiser mexer com os cabeçalhos (mesmo que seja apenas uma linha no caso mais simples), será necessário definir um UIView como rodapé, conforme explicado nas respostas anteriores.
Rápido e fácil Swift 4 way.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Se você está tendo células estáticas. Você também pode desligar o separador na janela Inspetor. (isso não será desejável se você precisar do separador. Nesse caso, use o método mostrado acima)
super.viewDidLoad()
) e está incluída na resposta da wiki na parte superior. Quanto à remoção de todos os separadores, não é realmente sobre o assunto desta pergunta; é melhor reverter sua última edição e / ou excluir completamente sua resposta.
Se você deseja remover o espaço indesejado no UITableview, pode usar abaixo dois métodos
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Adicionei esta pequena extensão de tableview que ajuda a
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Tente com isso
para o objetivo C
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}
para Swift
override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}
Caso você tenha um searchbar
em view
(para limitar o número de resultados, por exemplo), você também deve adicionar o seguinte em shouldReloadTableForSearchString
eshouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
No Swift (estou usando 4.0), você pode fazer isso criando uma UITableViewCell
classe personalizada e overriding
o setSelected
método Então o separator insets
todo para 0 . (minha classe principal com a exibição de tabela tem um fundo claro) cor.
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// eliminate extra separators below UITableView
self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}