私は、テキストの長さに応じて自動的に複数行のサイズを設定するようにUILabelを設定しました。ラベルはすべてのサイズの制約を持つ動的にサイズ変更するUITableViewCellにあります。UILabelを作成するには、ビューの幅が変更されたときに寸法を正しくサイズ変更するにはどうすればいいですか?
コードは、UILabelの原点を右に移動し、UILabelの幅を縮小します。
ラベルのサイズが正しく変更され、テキストがラップされます。原点を元の位置に戻す処理では、UILabelの高さが3行に拡張されます。しかし、テキストの2行だけが必要です。
高さが3行に展開理由は、コールがありますビューアニメーションで原点に戻って、原点を戻す処理では、テキストは3行に展開し、バック2
に減少させることですまたはセルのサイズを正しく変更するように設定しますか?または、元の変更が発生したときにセルのサイズを変更しないようにする方法があります。特に。 UILabelマルチラインオプションを一時的に無効にすることは可能ですか?
ここにその動作を示すスクリーンショットがあります。
図(1)UITableViewCellでラベルの位置を変更する前の位置。
図(2)UILabelの起源は右に移動し、ラベルの幅を減少させます。 2行目に2行があり、ラベルの境界線がテキストを抱きしめていることに注目してください。
図(3)の起源は、第1の画像の位置を返します。 2行目のUIlabelはテキストを抱きしめて元の高さに戻りません。
@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
}
}
はい、高さ1を除いて説明するように、すべての属性を使用してセルを動的に設定しました。 4面がすべて設定されているため、高さの制約はありません。問題は、サイズ変更のアニメーションにあります。ラベルが元のサイズにリサイズされると、UILabelはテキストを2行から3行にラップし、終了する前に2に戻します。ラベルを3行に設定すると、ラベルの原点が再び小さくなるまで高さを2行に再調整しません。 – Litehouse