Sobes.tech
Middle

Kas ir izlīdzināšana?

sobes.tech AI

Atbilde no AI

iOS izstrādē izlīdzināšana attiecas uz elementu (UIViews) izvietojuma mehānismiem attiecībā viens pret otru vai to konteineru (supperview). Galvenie izlīdzināšanas veidi:

  1. Rāmji (Frames): Pozīcijas un izmēra iestatīšana (x, y, width, height) katram View superview koordinātu sistēmā. Der vienkāršiem, fiksētiem maketiem.

    let myView = UIView(frame: CGRect(x: 10, y: 20, width: 100, height: 50))
    // myView tiks novietots 10, 20 punktos no superview augšējā kreisā stūra.
    
  2. Auto Layout: Deklaratīva elementu izvietojuma sistēma, balstīta uz noteikumiem (konstraintiem), kas nosaka attiecības starp Views. Elastīgs pieeja adaptīviem maketiem, kas pielāgojas dažādiem ekrāna izmēriem un orientācijām.

    • Konstraints: Noteikumi, kas nosaka ierobežojumus View īpašībām (piemēram, leading, trailing, top, bottom, centerY, centerX, width, height).
    • Konstraints prioritāte: Skaitliska vērtība, kas norāda svarīgumu konfliktu risināšanā (1-1000).

    Piemērs ar NSLayoutConstraint:

    let myView = UIView()
    myView.translatesAutoresizingMaskIntoConstraints = false // Izslēdz Auto Resizing Mask
    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)
    ])
    

    Piemērs ar 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)
    ])
    

    Piemērs ar 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))
    
  3. Auto Resizing Mask: Vienkārša izlīdzināšanas sistēma, kas bija pirms Auto Layout. Atļauj noteikt, kā View jāizstiepj vai jāsamazina, mainoties superview izmēram. Mazāk elastīga nekā Auto Layout, un bieži tiek atslēgta, izmantojot Auto Layout (translatesAutoresizingMaskIntoConstraints = false).

  4. Stack Views (UIStackView UIKit, VStack/HStack/ZStack SwiftUI): Konteineri, kas automātiski pārvalda savu bērnu View (arrangedSubviews) izvietojumu un izmēru, pamatojoties uz noteiktajām īpašībām (axis, alignment, distribution, spacing). Vienkāršo līniju un daudzslāņu maketēšanu ar automātisku izlīdzināšanu.

    let stackView = UIStackView()
    stackView.axis = .vertical // Vertikālā ass
    stackView.alignment = .center // Izlīdzinājums centrā
    stackView.distribution = .equalSpacing // Izkliedes sadalījums
    stackView.spacing = 10 // Attālums starp elementiem
    
    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)
    // Pievienojam konstraintus pašam stackView, lai to novietotu superview
    

Izvēlētais izlīdzināšanas metode ir atkarīga no maketa sarežģītības un adaptācijas prasībām. Lielākā daļa mūsdienu lietojumprogrammu izmanto Auto Layout, bieži kopā ar Stack Views.