Sobes.tech
Middle

Kaip pakeisti aukščio apribojimą, kad antraštės susitrauktų iki nulio?

sobes.tech AI

Atsakymas iš AI

Norint suskleisti antraštę, galima pakeisti jos constraint aukščio konstantą į 0.

Pavyzdys naudojant Auto Layout:

// Pavyzdys, kai turite IBOutlet nuorodą į antraštės aukščio constraint
@IBOutlet weak var headerHeightConstraint: NSLayoutConstraint!

// Norint suskleisti antraštę:
headerHeightConstraint.constant = 0.0

// Norint grąžinti pradinį aukštį (jei jis žinomas):
// headerHeightConstraint.constant = originalHeaderHeight

// Nepamirškite atnaujinti išdėstymą, jei nenaudojate automatinio atnaujinimo
UIView.animate(withDuration: 0.3) {
    self.view.layoutIfNeeded()
}

Pavyzdys naudojant NSLayoutConstraint.activate/deactivate:

// Pavyzdys, kai turite pradinį constraint ir nulinį constraint
let originalHeaderHeightConstraint: NSLayoutConstraint!
let zeroHeaderHeightConstraint: NSLayoutConstraint!

// Inicijuojant ar konfigūruojant:
originalHeaderHeightConstraint = headerView.heightAnchor.constraint(/* ... pradinio aukščio reikšmė ... */)
zeroHeaderHeightConstraint = headerView.heightAnchor.constraint(equalToConstant: 0.0)
zeroHeaderHeightConstraint.isActive = false // Iš pradžių neaktyvus

// Norint suskleisti antraštę:
NSLayoutConstraint.deactivate([originalHeaderHeightConstraint])
NSLayoutConstraint.activate([zeroHeaderHeightConstraint])

// Norint grąžinti pradinį aukštį:
// NSLayoutConstraint.deactivate([zeroHeaderHeightConstraint])
// NSLayoutConstraint.activate([originalHeaderHeightConstraint])

// Atnaujinti išdėstymą su animacija
UIView.animate(withDuration: 0.3) {
    self.view.layoutIfNeeded()
}

Pasirinkimas priklauso nuo to, kaip sukonfigūruoti constraints. constant naudojimas yra paprastesnis jau esantiems constraints. Aktyvavimas/ deaktyvavimas naudinga, kai reikia greitai perjungti tarp skirtingų constraint būsenų arba kai keli constraints nustato aukštį.

Svarbu iškviesti layoutIfNeeded() (pageidautina animacijos bloko viduje), kad pakeitimai būtų taikomi ir UI sklandžiai atnaujintųsi.