vertical raywenderlich objective example buttons ios uistackview

ios - raywenderlich - uistackview swift 3



UIStackView: ¿Es realmente necesario llamar tanto removeFromSuperView como removeArrangedSubview para eliminar una subvista? (3)

Hackear con Swift proporciona un buen ejemplo y una buena explicación, utilizando vistas web en este caso.

El motivo es que puede eliminar algo de la lista de subvistas organizada de una vista de pila y volver a agregarlo más tarde, sin tener que volver a crearlo cada vez que se ocultó, no se destruyó. No queremos una pérdida de memoria, por lo que queremos eliminar por completo las vistas web eliminadas. Si encuentra que su uso de memoria se dispara, ¡probablemente haya olvidado este paso!

https://www.hackingwithswift.com/read/31/4/removing-views-from-a-uistackview-with-removearrangedsubview

De la referencia de clase UIStackView

En removeArrangedSubview:

Para evitar que la vista aparezca en la pantalla después de llamar al método removeArrangedSubview: de la pila, elimine explícitamente la vista de la matriz de subvistas llamando al método removeFromSuperview de la vista.

En la subvista organizada:

Cada vez que se llama al método removeFromSuperview de una vista organizada, la vista de pila elimina la vista de su matriz de vistas organizadas

De estos, parece que llamar solo removeFromSuperview es suficiente para eliminar una subvista y lo he estado usando así sin problemas. También confirmé el comportamiento registrando el recuento de la matriz dispuestas cuando se llama a removeFromSuperview.

Una gran cantidad de tutoriales y comentarios aquí en S / O sin embargo, digamos para llamar a ambos. ¿Hay alguna razón para esto? ¿O la gente simplemente lo hace porque la documentación lo dice?


No, solo llame a subview.removeFromSuperView()

/* Removes a subview from the list of arranged subviews without removing it as a subview of the receiver. To remove the view as a subview, send it -removeFromSuperview as usual; the relevant UIStackView will remove it from its arrangedSubviews list automatically. */ open func removeArrangedSubview(_ view: UIView)


Tiene razón, solo la llamada para removeFromSuperview es suficiente para que la vista se elimine por completo.

Sospecho que la razón por la que las personas ponen ambos es porque se topan con la documentación de removeArrangedSubview que parece removeArrangedSubview que ambos son necesarios. (Y de hecho, lo son, si llama a removeArrangedSubview y quiere que la vista realmente se haya ido).

El documento adicional enorganSubviews no es visto por tantos, por lo que no se dan cuenta de que removeArrangedSubview es, en este caso, opcional.