Exibições de cabeçalho da tabela no StoryBoards

191

Existe uma maneira de inserir uma Visualização de cabeçalho de tabela (tableHeaderView) no StoryBoard (como costumávamos fazer no Interface Builder)?

Tyler DeWitt
fonte

Respostas:

349

Parece que alguém simplesmente arrasta um controle para o topo da visualização da tabela. Eu não esperava que fosse tão fácil.

Antes da gota

Antes da gota

After Drop

After Drop

Mr Rogers
fonte
29
Fiquei surpreso ao descobrir que é assim que é feito. Percebi na minha implementação que, para que isso funcionasse corretamente, eu tinha que excluir meu código de seção heightForHeaderInSection: (NSInteger), caso contrário, acabaria com espaço extra acima da própria exibição do cabeçalho. Além disso, para que esse cabeçalho "grude" na parte superior da visualização da tabela, eu tive que implementar a seção viewForHeaderInSection: (NSInteger) e retornar essa visualização.
ozz
13
Isso parece funcionar apenas se você tiver pelo menos uma célula protótipo na tabela.
Accatyyc
4
@cdo, você pode explicar como conseguiu fazer com que o cabeçalho "ficasse" na parte superior da visualização da tabela? Tentei implementar cegamente viewForHeaderInSection:e recebi um erro dizendo "Não é possível satisfazer simultaneamente as restrições". (Veja minha pergunta aqui: stackoverflow.com/questions/14554051/… )
ryanrhee
2
Obrigado, eu não poderia fazer isso até que soubesse que funcionaria, é necessário um arraste de precisão. Eu tentei fazer isso várias vezes ...
Dave Ross
1
Você pode usar o contorno à esquerda para arrastar, o que é mais fácil do que tentar atingir o ponto exato acima da primeira célula protótipo, se desejar definir a visualização do cabeçalho da tabela. Notei - talvez um bug do Xcode (5.0) - que isso só funcionaria quando eu tivesse movido a exibição da hierarquia regular primeiro; Eu arrastei todo o caminho até o final do contorno daquela cena. Então, em um segundo passo, eu poderia movê-lo para a exibição de tabela.
Daniel Schneller 23/09
10

Você pode fazer isso facilmente arrastando seu UIView/ UIImageViewlogo abaixo do UITableViewno esboço do documento (em vez do layout).

Se você tentar arrastar o layout em vez do contorno do documento, ele UITableViewCellirá para a manipulação superior, o que é frustrante!

PANKAJ VERMA
fonte
-2

Arrastar e soltar uma visualização em cima da tableview funcionou para apenas um tamanho de tela, pelo menos no Xcode 11. Não funcionou bem em telas diferentes.

Acabei de criar uma view e deixei lá atrás da tableview no storyboard. Eu criei um IBOutlet para ele:

@IBOutlet weak var audioView: UIView!

Então, no código tableview, fiz:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return audioView
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 142
}

Funcionou bem em todos os tamanhos de tela.

Badr
fonte
1
A questão é sobre a visualização do cabeçalho da tabela, não a visualização do cabeçalho da seção.
R. Rincón
@R. Rincón, onde mencionei um cabeçalho de seção? A seção nos métodos é necessária a partir da estrutura. Todo TableView possui pelo menos uma seção, se você não souber disso. Basta passar na seção 0 Se você não possui seções.
Badr
Esse código retorna audioView para cada seção como cabeçalho da seção. Se alguém implementar isso, tableView.tableHeaderView será nulo. Se eles tiverem cinco seções, terão cinco cabeçalhos. Se eles já possuem cabeçalhos de seção e desejam adicionar uma exibição de cabeçalho de tabela, esta resposta não os ajuda. Isso não responde à pergunta, que menciona especificamente tableHeaderView.
R. Rincón
Você pode especificar a visualização do cabeçalho de cada seção com alguma lógica dentro do método. TableViews criados com seções em mente. Você sempre tem seções, caso contrário, essa seria a seção 0. Não há método para especificar a exibição do cabeçalho sem especificar uma seção.
Badr