2017-10-12 2 views
0

私は、テキストの長さに応じて自動的に複数行のサイズを設定するようにUILabelを設定しました。ラベルはすべてのサイズの制約を持つ動的にサイズ変更するUITableViewCellにあります。UILabelを作成するには、ビューの幅が変更されたときに寸法を正しくサイズ変更するにはどうすればいいですか?

コードは、UILabelの原点を右に移動し、UILabelの幅を縮小します。

ラベルのサイズが正しく変更され、テキストがラップされます。原点を元の位置に戻す処理では、UILabelの高さが3行に拡張されます。しかし、テキストの2行だけが必要です。

高さが3行に展開理由は、コールがありますビューアニメーションで原点に戻って、原点を戻す処理では、テキストは3行に展開し、バック2

に減少させることですまたはセルのサイズを正しく変更するように設定しますか?または、元の変更が発生したときにセルのサイズを変更しないようにする方法があります。特に。 UILabelマルチラインオプションを一時的に無効にすることは可能ですか?

ここにその動作を示すスクリーンショットがあります。

図(1)UITableViewCellでラベルの位置を変更する前の位置。

Before label origin Move

図(2)UILabelの起源は右に移動し、ラベルの幅を減少させます。 2行目に2行があり、ラベルの境界線がテキストを抱きしめていることに注目してください。

Moved label origin right

図(3)の起源は、第1の画像の位置を返します。 2行目のUIlabelはテキストを抱きしめて元の高さに戻りません。

Return origin to the first position

@IBAction func editTable(_ sender: UIBarButtonItem) { 

    if isEditingDynamic { 
     let animate = UIViewPropertyAnimator(duration: 0.4, curve: .easeIn) { 
      for cell in self.tableView.visibleCells as! [CellResize] { 
       cell.lblDescription.frame.origin.x = 16 
      } 
      self.tableView.beginUpdates() 
      self.tableView.endUpdates() 
     } 
     animate.addCompletion(){ 
      (position:UIViewAnimatingPosition) in 
      for cell in self.tableView.visibleCells as! [CellResize] { 
       cell.leadingContraint.constant = 0 
      } 
      self.tableView.beginUpdates() 
      self.tableView.endUpdates() 
     } 
     animate.startAnimation() 
     isEditingDynamic = false 
    } else { 
     let animate = UIViewPropertyAnimator(duration: 0.4, curve: .easeIn) { 
      for cell in self.tableView.visibleCells as! [CellResize] { 
       cell.lblDescription.frame.origin.x = 60 
      } 
      self.tableView.beginUpdates() 
      self.tableView.endUpdates() 
     } 
     animate.addCompletion(){ 
      (position:UIViewAnimatingPosition) in 
      for cell in self.tableView.visibleCells as! [CellResize] { 
       cell.leadingContraint.constant = 54 
      } 
      self.tableView.beginUpdates() 
      self.tableView.endUpdates() 
     } 
     animate.startAnimation() 
     isEditingDynamic = true 
    } 
} 

答えて

0

あなたのテーブルビューセルとコントローラが設定されている方法のいくつかのコードを投稿することができますか?一般的に、私は何だろうと、私は1行UILabelを作成し、height constraint >= current & numberOfLines = 0でそれTopLeftTrailing & Leadingを拘束し、セルのコンテンツビュー内に配置されますです。

次に、tableview cellでは、estimatedHeight to be 100heightForRow to be UITableViewAutomaticDimensionを設定します。

この場合、TableViewはラベルの内容に基づいてセルの高さを自動的に処理します。

+0

はい、高さ1を除いて説明するように、すべての属性を使用してセルを動的に設定しました。 4面がすべて設定されているため、高さの制約はありません。問題は、サイズ変更のアニメーションにあります。ラベルが元のサイズにリサイズされると、UILabelはテキストを2行から3行にラップし、終了する前に2に戻します。ラベルを3行に設定すると、ラベルの原点が再び小さくなるまで高さを2行に再調整しません。 – Litehouse

関連する問題