Junior
Kas yra Auto Layout ir kaip jis skiriasi nuo rėmų naudojimo išdėstymo?
sobes.tech AI
Atsakymas iš AI
Auto Layout — tai sistema, pagrįsta apribojimais (constraints), kuri nustato UI elementų padėtį ir dydį viena kitos ir superview atžvilgiu.
Skirtumai nuo išdėstymo naudojant rėmus:
- Pagrindas: Auto Layout naudoja taisyklių (constraints) rinkinį padėčiai nustatyti, o rėmai — fiksuotas koordinates ir dydžius.
- Prisitaikymas: Auto Layout automatiškai pritaiko išdėstymą skirtingo dydžio ekranams, įrenginio orientacijai ir dinamiškam teksto dydžiui. Rėmai reikalauja rankinio perskaičiavimo ir atnaujinimo kiekvienoje situacijoje.
- Lankstumas: Vieno elemento pakeitimas Auto Layout dažnai sukelia kitų elementų automatinį pertvarkymą pagal nustatytus constraints. Naudojant rėmus, kiekvienas pakeitimas gali reikalauti rankinio koordinačių ir dydžių atnaujinimo.
- Sudėtingumas: Paprastiems statiniams interfeisams rėmų išdėstymas gali būti greitesnis. Sudėtingesniems, dinamiškiems ir prisitaikantiems interfeisams Auto Layout tampa labiau palaikomas ir mažiau linkęs į klaidas.
- Sprendžiamos užduotys: Auto Layout idealiai tinka kuriant prisitaikančius interfeisus, kurie turi būti teisingai rodomi skirtinguose įrenginiuose ir keičiant aplinkos parametrus.
Pavyzdys constraints Auto Layout:
// Kuriamas mygtukas
let button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false // Svarbu Auto Layout
// Pridedamas mygtukas prie view
view.addSubview(button)
// Nustatomi constraints (centravimas horizontaliai, 20pt nuo apatinio krašto)
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20)
])
Pavyzdys su rėmais:
// Kuriamas mygtukas
let button = UIButton()
// Nustatomas rėmas (centravimas horizontaliai, 20pt nuo apatinio krašto)
let buttonWidth: CGFloat = 100
let buttonHeight: CGFloat = 40
let x = (view.bounds.width - buttonWidth) / 2 // Rankinis skaičiavimas X
let y = view.bounds.height - buttonHeight - 20 // Rankinis skaičiavimas Y
button.frame = CGRect(x: x, y: y, width: buttonWidth, height: buttonHeight)
// Pridedamas prie view
view.addSubview(button)
// Keičiant dydį ar orientaciją, reikia rankiniu būdu perskaičiuoti frame