Sobes.tech
Middle

Mis on joondamine?

sobes.tech AI

Vastus AI-lt

iOS arendamisel tähendab joondamine kasutajaliidese elementide (UIViews) paigutusmehhanisme üksteise või nende konteineri (superview) suhtes. Peamised joondamise meetodid:

  1. Raamid (Frames): Iga View asukoha ja suuruse määramine (x, y, width, height) tema superview koordinaatsüsteemis. Sobib lihtsate, fikseeritud paigutuste jaoks.

    let myView = UIView(frame: CGRect(x: 10, y: 20, width: 100, height: 50))
    // myView asub punktis (10, 20) superview vasak ülanurgast.
    
  2. Auto Layout: Deklaratiivne paigutussüsteem, mis põhineb reeglitel (konstraintidel), mis määravad suhted Views vahel. Paindlik lähenemine kohanduvatele paigutustele, mis sobituvad erinevate ekraanisuuruste ja orientatsioonidega.

    • Konstraints: Reeglid, mis määravad View omaduste piirangud (näiteks leading, trailing, top, bottom, centerY, centerX, width, height).
    • Konstraintide prioriteet: Numbriline väärtus, mis näitab prioriteeti konfliktide lahendamisel (1-1000).

    Näide NSLayoutConstraint kasutamisest:

    let myView = UIView()
    myView.translatesAutoresizingMaskIntoConstraints = false // Keelame Auto Resizing Maski
    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)
    ])
    

    Näide Layout Anchors kasutamisest:

    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)
    ])
    

    Näide VFL (Visual Format Language) kasutamisest:

    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))
    
  3. Auto Resizing Mask: Lihtne joondamise süsteem, mis oli enne Auto Layouti. Annab võimaluse määrata, kuidas View peab venima või kokku tõmbuma, muutudes superview suuruses. Vähem paindlik kui Auto Layout ja sageli välja lülitatud (translatesAutoresizingMaskIntoConstraints = false).

  4. Stack Views (UIStackView UIKit, VStack/HStack/ZStack SwiftUI): Konteinerid, mis automaatselt juhivad oma alamvaadete (arrangedSubviews) paigutust ja suurust vastavalt määratud omadustele (axis, alignment, distribution, spacing). Lihtsustavad lineaarsete ja kihiliste paigutuste loomist automaatse joondamisega.

    let stackView = UIStackView()
    stackView.axis = .vertical // Vertikaalne telg
    stackView.alignment = .center // Joondamine keskjoonele
    stackView.distribution = .equalSpacing // Jaotuse suurus
    stackView.spacing = 10 // Vahemaa elementide vahel
    
    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)
    // Lisame konstraintid stackViewile, et paigutada see superview'sse
    

Valitud joondamise meetod sõltub paigutuse keerukusest ja kohandamise nõuetest. Enamik kaasaegseid rakendusi eelistab Auto Layouti, sageli koos Stack View'idega.