¿Por qué mis tags se mueven cuando expande mi TableViewCell y por qué recibo una animation de celda diferente cuando se toca?

Hice tableViewCell que se expande y queuepsa cuando se toca, también tengo dos tags en mi celda ( dateLabel y textLabel ), pero cuando textLabel la celda, mis tags también se mueven con ella. ¿Cómo los hago estáticos y los paro de moverse cuando se tocan?

Aquí está mi código de class que tiene el tableView :

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) let previousIndexPath = selectedIndexPath if indexPath == selectedIndexPath { selectedIndexPath = nil } else { selectedIndexPath = indexPath } var indexPaths : Array<IndexPath> = [] if let previous = previousIndexPath { indexPaths += [previous] } if let current = selectedIndexPath { indexPaths += [current] } if indexPaths.count > 0 { tableView.reloadRows(at: indexPaths, with: UITableViewRowAnimation.automatic) } } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCellID") as! CustomCell cell.textLabel?.text=list[indexPath.row] cell.dateLabel?.text = time.indices.contains(indexPath.row) ? time[indexPath.row] : "Not Available" print(time.indices.contains(indexPath.row)) return (cell) } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if indexPath == selectedIndexPath { return CustomCell.expandedHeight } else { return CustomCell.defaultHeight } } override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { (cell as! CustomCell).watchFrameChanges() } override func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { (cell as! CustomCell).ignoreFrameChanges() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) for cell in tableView.visibleCells as! [CustomCell] { cell.ignoreFrameChanges() } } 

y mi class CustomCell :

 var isObserving = false; class var expandedHeight: CGFloat { get { return 170 } } class var defaultHeight: CGFloat { get { return 40 } } func checkHeight() { textView.isHidden = (frame.size.height < CustomCell.expandedHeight) } func watchFrameChanges() { if !isObserving { addObserver(self, forKeyPath: "frame", options: [NSKeyValueObservingOptions.new, NSKeyValueObservingOptions.initial], context: nil) isObserving = true; } } func ignoreFrameChanges() { if isObserving { removeObserver(self, forKeyPath: "frame") isObserving = false; } } override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if keyPath == "frame" { checkHeight() } } 

También obtengo las diferentes animaciones para diferentes celdas … como obtengo la animation de diapositivas para 1st cell y se desvanecen para el rest de todas

@PangHoMing No estoy usando ninguna restricción … en ninguna de las tags. La dateLabel está en el stroyboard, pero el textLabel se llama programáticamente.

así que creo que ese es el problema. Por ejemplo, el textLabel pnetworkingeterminado viene con la celda siempre horizontalmente en el centro. Y para el caso dateLabel , debe establecer restricciones dentro del guión gráfico.

De lo contrario, iOS Autolayout distribuirá las vistas en 'su' manera. https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/

Consejos rápidos:

Evite el uso de cell.textLabel viene con la celda pnetworkingeterminada. Puede diseñar la celda mediante progtwigción implementando layoutSubView en su class de celda personalizada. Pero si no confortas con la disposition de la interfaz de usuario con el código, la mejor manera de hacerlo es usar Storyboard.

Echar un vistazo a estos ayudará:

https://www.youtube.com/watch?v=EVJiprvRLoo

https://www.ralfebert.de/tutorials/ios-swift-fitableviewcontroller/custom-cells/

En realidad, este es su problema de layout. Si desea que su label sea estática, tendrá que dar limitaciones de acuerdo con esta necesidad solamente. Como si desea que la label esté en la misma position incluso si se presiona el button Expandir, Restricción de la label: el ancho máximo de la altura superior. Esto y el marco serán los mismos.