2016-11-26 5 views
0

データでTableViewCellが設定されています。たとえば、ラベルを1つだけ表示したい場合、ユーザーがセルをクリックすると、セルがサイズ変更され、すべてのデータがユーザーに表示されます。私は部分のサイズを変更していますが、セルが小さいときは自動的に制約が変わります。誰かが私を助けることができますか?下の写真をコードしてください。クリック後にUITableViewCellのサイズが変更され、制約が変更されています

ありがとうございます!

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if (i != indexPath.row) { 
     i = indexPath.row 
    } 
    else { 
     i = -1 
    } 
    tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic) 
} 


func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if (indexPath.row == i) { 
     return 250 
    } 
    else { 
     return 50 
    } 
} 

before user clicks

after user clicks

答えて

1

セルが50のあなたの制約の高さにあるときにあなたがそれらをレイアウトするたかったとして、それら全てを収容するのに十分なスペースがないので、破壊されています。したがって、セルの高さは、セル内の要素に追加された他の制約の前に守られているため、一緒に押しつぶされます。

制約エラーを解消するには、制約の優先度とリレーションモードを使いましょう。

最後に、あなたの細胞が崩壊したとき、あなたは隠されるべきもので、次を呼び出すことにより、表示したいものを除き、他のすべてのラベルを非表示にすることができます:

label.hidden = true 

かそこらのような彼らの消失をアニメーション:

UIView.animate(withDuration: 0.2, animations: { 
     label.alpha = 0    
    }, completion: { completed -> Void in 
      label.hidden = true 
}) 

また、逆に、セルを展開すると再び表示されます。

+0

ありがとう、私は私のセルの中にビューを持っていて、余白に制約がありました。私はちょうどこのViewの制約を一定に設定しています。 – deniskakacka

関連する問題