Ich habe ein UILabel konfiguriert für die automatische Größe für mehrere Zeilen abhängig von der Textlänge. Das Label befindet sich in einer dynamisch skalierenden UITableViewCell mit Einschränkungen für alle Größen.Wie kann UILabel seine Abmessungen korrekt ändern, wenn sich die Ansichtsbreite ändert?
Der Code verschiebt den UILabel-Ursprung nach rechts und verkleinert dadurch die UILabel-Breite.
Das Etikett passt die Größe des Textes korrekt an und umschließt den Text. Bei der Positionierung des Ursprungs an seinem ursprünglichen Ort wird die Höhe des UILabel um 3 Zeilen erweitert. Aber nur 2 Zeilen Text sind erforderlich.
Der Grund ist die Höhe zu 3 Zeilen erweitert ist, dass mit Blick Animation zum ursprünglichen Punkt im Prozess, den Ursprung zurück zurückzukehren, Der Text zu 3 Zeilen erweitert und ein Rückruf 2.
Gibt es reduziert oder Einstellung, um die Zelle korrekt skalieren zu lassen? Oder 2 gibt es eine Möglichkeit, die Zelle daran zu hindern, die Größe zu ändern, wenn sich der Ursprung ändert. Bestimmtes. Ist es möglich, die UILabel-Option für mehrere Zeilen vorübergehend zu deaktivieren, wenn die Breite verkleinert und erweitert wird?
Hier sind Screenshots, die das Verhalten zeigen.
Abbildung (1) Position des Etiketts in der UITableViewCell, bevor der Ursprung geändert wird.
Figur (2) Der Ursprung der UILabel bewegt sich nach rechts und verringert die Breite des Etiketts. Beachten Sie, dass die zweite Zeile 2 Zeilen enthält und der Beschriftungsrahmen den Text fest umschließt.
Figure (3) Herkunft gibt die Position des ersten Bildes. Beachten Sie, dass das UIlabel der zweiten Zeile den Text locker umarmt und nicht zur ursprünglichen Höhe zurückkehrt.
@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
}
}
Ja, ich habe die Zelle so konfiguriert, dass sie mit allen Attributen dynamisch ist, die Sie beschreiben, mit Ausnahme der Höhe eins. Es gibt keine Höhenbeschränkung, da die 4 Seiten alle gesetzt sind. Das Problem liegt in der Animation der Größenanpassung. Ich kann sehen, wie sich die Größe des Labels auf die ursprüngliche Größe ändert, das UILabel umschließt den Text von 2 Zeilen auf 3 Zeilen und dann zurück auf 2, bevor er fertig ist. Wenn das Etikett auf 3 Zeilen eingestellt ist, wird die Höhe nicht mehr auf 2 Zeilen angepasst, bis der Etikettenursprung wieder kleiner wird. – Litehouse