2017-06-02 12 views
0

私は、あなたが下記のようにUILabelを少し膨張させて崩壊させようとしています。その下にもテキストがあります。あなたが見出しに触れると、あなたはテキストをより少なく表​​示するはずです。UILabelを展開して折りたたむ方法は?

テキストラベルの行数を0に設定でき、テキスト全体を表示するのに必要な高さがわかります。私の最初のアプローチは、これは技術的に動作しますが、アニメーションはひどい見える3を言うためにゼロからの行数を変更し、私は以下のコードのような何かを...

`UIView.animate(withDuration: 0.4) { 
     self.body.superview?.layoutIfNeeded() 
    }` 

ました。より良い言葉の不足のために不安定に見えるので、私は高さを動かす必要があるかもしれないと思う。どのくらいの時間がかかるのか分からなければ、実際にテキストの高さを計算するにはどうしたらいいですか?私は65(何らかの任意の数)から、それが必要な高さまで高さをアニメートすることができます。

enter image description here

+0

*正確には同じではありませんが、これにはいくつかの助けがあります:https://stackoverflow.com/questions/43096231/expand-uilabel-inside-uitable-view-with-more-button-like-instagram/43096940 #43096940 – DonMag

答えて

0

簡単な方法:

内部に2つのラベルでStackViewを作成します。タイトルの最初のラベル、テキストの2番目のラベル - デフォルトでは隠されています。

今すぐタップ動作にちょうどこの操作を行います。StackViewアニメーションで

UIView.animate(withDuration: 0.5) { 
    self.textLabel.isHidden = false 
} 

は無料です:)

+0

はい、私はそれを完全に非表示にしないようにテキストを短くしようとしていますが、そうでなければかなり上品な解決策です。 – user3832583

1

はい、できます。高さの制約を設定して定数を変更する必要があります(または、2つの制約を設定して優先度を変更することができます。優先度は1000ではなく、1と999です。あなたが持っているアニメーションブロックの前でそれを行い、それをそのまま保ちます。

私はあなたがあなたのストーリーボード上FMStateConstraintSwitchをドロップストーリーボード

https://github.com/fer662/FMConstraintSwitch

からこれの99%を行うことができますポッドを持って、制約のためにコンセントを設定し、必要親ビューレイアウトされる。あなたのコードからFMStateConstraintSwitchの状態を変更するだけです。各状態に対して1つ以上の制約を切り替えることができます。

+0

私はUILabelにどのようなサイズがわからないのか制約を設定すれば、それはどのように動作するのでしょうか? – user3832583

+0

作成したいトランジションがラベルの任意のサイズにキャップされ、他のステートが固有の高さである場合、999の優先順位で任意のサイズ(例:60)に1つの制約を設定します。優先度を1に変更してアニメートすると、本来のサイズが引き継がれます。 –

+0

これはうまくいく、と私はそれが有用だと思うが、アニメーションはまだまだ途方もないです。どのようにこれを少し良く見えるようにするための考え?私はgifとして現在持っているもので質問を更新するかもしれないので、あなたはそれがどのように見えるかを見ることができます。 – user3832583