Co je to zarovnání?
sobes.tech AI
Odpověď od AI
Zarovnání v iOS vývoji odkazuje na mechanismy umístění prvků uživatelského rozhraní (UIViews) vůči sobě nebo jejich kontejneru (superview). Hlavní přístupy:
-
Frames: Nastavení pozice a velikosti (x, y, width, height) každého View v souřadnicovém systému superview. Vhodné pro jednoduché, pevné rozvržení.
let myView = UIView(frame: CGRect(x: 10, y: 20, width: 100, height: 50)) // myView bude umístěn v bodě (10, 20) vzhledem k levému hornímu rohu superview. -
Auto Layout: Deklarativní systém pro umístění prvků na základě pravidel (constraints), která určují vztahy mezi Views. Flexibilní přístup pro responzivní rozvržení, které se přizpůsobují různým velikostem obrazovky a orientacím.
- Constraints: Pravidla, která nastavují omezení vlastností View (například leading, trailing, top, bottom, centerY, centerX, width, height).
- Priorita constraint: Číselná hodnota, která ukazuje důležitost constraint při řešení konfliktů (1-1000).
Příklad constraints s NSLayoutConstraint:
let myView = UIView() myView.translatesAutoresizingMaskIntoConstraints = false superview.addSubview(myView) NSLayoutConstraint.activate([ myView.leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: 20), myView.trailingAnchor.constraint(equalTo: superview.trailingAnchor, constant: -20), myView.topAnchor.constraint(equalTo: superview.topAnchor, constant: 80), myView.heightAnchor.constraint(equalToConstant: 100) ])Constraints pomocí Layout Anchors:
let myView = UIView() myView.translatesAutoresizingMaskIntoConstraints = false superview.addSubview(myView) NSLayoutConstraint.activate([ myView.centerXAnchor.constraint(equalTo: superview.centerXAnchor), myView.centerYAnchor.constraint(equalTo: superview.centerYAnchor), myView.widthAnchor.constraint(equalToConstant: 200), myView.heightAnchor.constraint(equalToConstant: 150) ])Constraints pomocí VFL (Visual Format Language):
let myView = UIView() myView.translatesAutoresizingMaskIntoConstraints = false superview.addSubview(myView) let views: [String: UIView] = ["myView": myView] let metrics: [String: CGFloat] = ["margin": 20] NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|-margin-[myView]-margin-|", options: [], metrics: metrics, views: views)) NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "V:|-80-[myView(100)]", options: [], metrics: nil, views: views)) -
Autoresizing Mask: Jednoduchý systém zarovnání, který předcházel Auto Layout. Umožňuje určit, jak se View bude roztahovat a stlačovat při změně velikosti superview. Méně flexibilní než Auto Layout, často se vypíná při použití Auto Layout (
translatesAutoresizingMaskIntoConstraints = false). -
Stack Views (UIStackView v UIKit, VStack/HStack/ZStack v SwiftUI): Kontejnery, které automaticky řídí umístění a velikost svých podřízených View (arrangedSubviews) na základě nastavených vlastností (axis, alignment, distribution, spacing). Zjednodušují tvorbu lineárních a vrstvených rozvržení s automatickým zarovnáním.
let stackView = UIStackView() stackView.axis = .vertical stackView.alignment = .center stackView.distribution = .equalSpacing stackView.spacing = 10 let label = UILabel() label.text = "Hello" let button = UIButton(type: .system) button.setTitle("Tap Me", for: .normal) stackView.addArrangedSubview(label) stackView.addArrangedSubview(button) superview.addSubview(stackView) // Přidání constraints pro umístění stackView do superview
Volba metody zarovnání závisí na složitosti rozvržení a požadavcích na adaptabilitu. Ve většině moderních aplikací je preferováno Auto Layout, často ve spojení se Stack Views.