Abandona AutoLayout i Accelera la teva App amb aquest Truc Clàssic

Optimitza el rendiment de la teva app iOS eliminant AutoLayout i usant disseny manual amb frames. Millora la velocitat, el desplaçament i la resposta de la UI amb aquest enfocament eficient.

martes, 11 de marzo de 2025 • 3 min de lectura • Equip Q2BSTUDIO

Empresa-Software-Apps

Aquesta és la segona part d'un cicle d'articles sobre com millorar el rendiment de les aplicacions iOS.

Per què AutoLayout podria estar alentint la teva app i com solucionar-ho

AutoLayout és l'eina estàndard per posicionar i dimensionar elements UI en aplicacions iOS. És flexible i potent, però no sempre és l'opció més eficient. Quan la interfície requereix ajustos dinàmics, com etiquetes que canvien de mida segons el seu contingut, AutoLayout pot generar problemes de rendiment, especialment en dispositius més antics.

Al principi, la diferència en el rendiment pot ser mínima. Però a mesura que la UI es torna més complexa, els efectes es fan notoris: desplaçaments entrecortats, animacions amb retard i una experiència visual menys fluida.

L'alternativa és usar layouts manuals amb frames. En lloc de dependre d'AutoLayout, es calcula i estableix manualment la posició i la mida dels elements de la interfície. Això requereix més línies de codi, però millora considerablement la velocitat i la responsivitat de l'aplicació.

Per exemple, en una cel·la de pronòstic del temps, en lloc de definir múltiples restriccions d'AutoLayout, es posicionen els elements manualment utilitzant la propietat frame. Això elimina el temps de processament addicional causat per la resolució de restriccions, fent que les actualitzacions de UI siguin molt més ràpides.

No obstant això, els layouts manuals són rígids. Si canvien la mida de la cel·la o la font del text, els valors s'han d'ajustar manualment, cosa que afegeix manteniment addicional.

Un mètode efectiu per gestionar això és deshabilitar la creació automàtica de restriccions en tots els elements abans de definir la seva posició manualment.

Per controlar com s'ajusten les etiquetes dins d'una cel·la, es pot calcular la seva mida abans de posicionar-les:

func getLabelSize(text: String, font: UIFont) -> CGSize {
    let maxWidth = bounds.width - insets * 2
    let textBlock = CGSize(width: maxWidth, height: CGFloat.greatestFiniteMagnitude)
    let rect = text.boundingRect(with: textBlock, options: .usesLineFragmentOrigin,
                                 attributes: [.font: font], context: nil)
    return CGSize(width: ceil(rect.width), height: ceil(rect.height))
}

Aquest mètode permet que l'etiqueta s'adapti dinàmicament sense malgastar espai o causar retalls en el text.

Després, es defineixen els marcs dels elements dins de la cel·la:

func messageLabelFrame() {
    guard let text = messageLabel.text, !text.isEmpty else { return }
    let messageLabelSize = getLabelSize(text: text, font: messageLabel.font)
    let messageLabelX = avatarImageView.frame.maxX + insets
    messageLabel.frame = CGRect(x: messageLabelX, y: insets, width: messageLabelSize.width, height: messageLabelSize.height)
}

Aquest principi es pot aplicar a la resta d'elements de la cel·la, garantint un posicionament òptim sense dependre de restriccions dinàmiques d'AutoLayout.

Un cop definits aquests mètodes, s'invoquen dins de layoutSubviews per actualitzar els frames quan canvien les dades:

override func layoutSubviews() {
    super.layoutSubviews()
    messageLabelFrame()
    timestampLabelFrame()
    avatarImageFrame()
}

A més, es poden crear setters per actualitzar el contingut correctament:

func setMessage(text: String) {
    messageLabel.text = text
    messageLabelFrame()
}

func setTimestamp(text: String) {
    timestampLabel.text = text
    timestampLabelFrame()
}

Això garanteix que cada vegada que s'actualitzi el contingut, la UI reflecteixi els canvis correctament sense generar càlculs innecessaris.

Conclusió

En prescindir d'AutoLayout i adoptar layouts manuals amb frames, eliminem la sobrecàrrega generada pels càlculs automàtics de restriccions. Això optimitza la fluïdesa de la interfície, millora el rendiment i redueix els retards en aplicacions amb contingut dinàmic.

Tot i que aquesta tècnica implica escriure més codi i prestar atenció a possibles canvis visuals, el benefici en termes de velocitat i experiència d'usuari el converteix en una estratègia valuosa per a aplicacions que requereixen màxima eficiència.

A Q2BSTUDIO, ens especialitzem en el desenvolupament de solucions tecnològiques d'alt rendiment. Apliquem metodologies optimitzades per garantir aplicacions ràpides, fluides i escalables, assegurant que cada projecte lliuri la millor experiència a l'usuari sense comprometre l'eficiència.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.