Sobes.tech
Junior

Mis on Auto Layout ja kuidas see erineb raamide kasutamisest paigutamisel?

sobes.tech AI

Vastus AI-lt

Auto Layout — see on piirangutel põhinev paigutussüsteem, mis määrab UI elementide asukoha ja suuruse üksteise ja superview'i suhtes.

Erinevused raamidega paigutusest:

  • Põhimõte: Auto Layout kasutab reeglite (constraints) kogumit paigutuse määramiseks, raamid aga fikseeritud koordinaadid ja suurused.
  • Kohanduvus: Auto Layout kohandab automaatselt paigutust erinevatele ekraanisuurustele, seadme orientatsioonile ja dünaamilisele teksti suurusele. Raamid nõuavad käsitsi ümberarvutamist ja uuendamist iga olukorra jaoks.
  • Paindlikkus: Ühe elemendi muutmine Auto Layoutis sageli viib teiste elementide automaatse ümberstruktureerimiseni vastavalt seatud constraints'idele. Raamide kasutamisel võib iga muudatus nõuda käsitsi koordinaatide ja suuruste uuendamist.
  • Väiksem keerukus: Lihtsate statiliste liideste jaoks võib raamidega paigutus olla kiirem. Keerukamate, dünaamiliste ja kohanduvate liideste puhul muutub Auto Layout hooldatavamaks ja vähem vigadele vastuvõtlikuks.
  • Lahendatavad ülesanded: Auto Layout sobib ideaalselt kohanduvate liideste loomisel, mis peavad õigesti kuvama erinevatel seadmetel ja keskkonnamuutuste korral.

Auto Layout constraints näide:

// Nupu loomine
let button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false // Oluline Auto Layout jaoks

// Nupu lisamine vaatele
view.addSubview(button)

// Constraints seadistamine (keskjoon horisontaalselt, 20pt alt)
NSLayoutConstraint.activate([
    button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
    button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20)
])

Raamide näide:

// Nupu loomine
let button = UIButton()

// Rame seadistamine (keskjoon horisontaalselt, 20pt alt)
let buttonWidth: CGFloat = 100
let buttonHeight: CGFloat = 40
let x = (view.bounds.width - buttonWidth) / 2 // Käsitsi arvutus X
let y = view.bounds.height - buttonHeight - 20 // Käsitsi arvutus Y

button.frame = CGRect(x: x, y: y, width: buttonWidth, height: buttonHeight)

// Lisamine vaatele
view.addSubview(button)

// Muutuste korral — tuleb käsitsi arvutada frame uuesti