@elfo106, ok, estou a ver. Dependendo do caso de uso concreto e da possibilidade de texto maior, não aconselhava um height fixo na label, aconselharia antes o número de linhas a 0 e o posicionamento das labels relativo entre elas, assim mesmo que o texto seja mais longo, nada fica cortado. Mas isso são detalhes.
Primeiro aconselho a meteres as labels da seguinte forma:
A primeira com uma distância x ao topo, a segunda com distância x da primeira, a terceira com x da segunda e x do bottom. coloca texto nas 3 e vê se ficam como querias com a cell expandida, isto é o primeiro passo.
Estando isso a funcionar, o que podes fazer é na primeira label criar uma constraint de distância ao bottom da cell de x (a mesma distância que tem para a segunda label) e criar os IBOutlets dessa constraint e da constraint entre a terceira label e o bottom. Depois basta ao seleccionar a cell alterar entre as constraints activas e inactivas. Isto é, se a constraint do bottom da primeira label estiver activa, a do bottom da terceira está inactiva, assim a cell ficará com o tamanho menor.
Se não tiver sido explicíto diz, que eu meto um projectozito com um exemplo no Github.
PS: apaga o método heightForRowAt ou então faz apenas return de UITableViewCellAutomaticDimension. Não tenhas lá números.
PS2: Ignora o tamanho da cell, não mexas lá Mexe só nos constraints das subviews (labels, neste caso) e não te preocupes que a cell se redimensiona automaticamente.