Чӣ тавр баробар кардан?
sobes.tech AI
Ҷавоб аз AI
Тартиб додани дар таҳияи iOS ба механизмҳои ҷойгиркунии унсурҳои интерфейси корбар (UIViews) дар нисбат ба якдигар ё контейнерҳои онҳо (супервью). Равишҳои асосии тартиб додан:
-
Фреймҳо (Frames): Муайян кардани ҷойгиршавӣ ва андоза (x, y, width, height) ҳар як View дар системаи координатии супервью. Барои макетҳои содда ва мустаҳкам мувофиқ аст.
let myView = UIView(frame: CGRect(x: 10, y: 20, width: 100, height: 50)) // myView дар нуқтаи (10, 20) нисбат ба кунҷи болоии чапи супервью ҷойгир мешавад. -
Auto Layout: Системаи декларативӣ барои ҷойгиркунии унсурҳо бо асоси қоидаҳо (констрейнтҳо), ки муносибатҳоро байни Views муайян мекунанд. Равиши чандир барои макетҳои адаптив, ки ба андозаҳои гуногуни экран ва ориентацияҳо мутобиқ мешаванд.
- Констрейнтҳо: Қоидаҳо, ки маҳдудиятҳоро ба хусусиятҳои View (масалан, leading, trailing, top, bottom, centerY, centerX, width, height) муқаррар мекунанд.
- Преоритети констрейнт: Арзиши рақамӣ, ки аҳамияти констрейнтро дар ҳал кардани ихтилофот нишон медиҳад (1-1000).
Намунаи констрейнтҳо бо истифода аз NSLayoutConstraint:
let myView = UIView() myView.translatesAutoresizingMaskIntoConstraints = false // Вайрон кардани 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) ])Намунаи констрейнтҳо бо истифода аз 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) ])Намунаи констрейнтҳо бо истифода аз 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): Системаи содда барои тартиб додан, ки пеш аз Auto Layout истифода мешуд. Имкон медиҳад, ки чӣ гуна View бояд дар сурати тағирёбии андозаи супервьюи худ васеъ ё танг шавад. Аз Auto Layout камтар чандир аст ва аксар вақт дар истифодаи Auto Layout ғайрифаъол карда мешавад (
translatesAutoresizingMaskIntoConstraints = false). -
Stack Views (UIStackView дар UIKit, VStack/HStack/ZStack дар SwiftUI): Контейнерҳо, ки автоматӣ ҷойгиркунии ва андозаи фарзандони худро (arrangedSubviews) бо асоси хосиятҳои муайянкардашуда (axis, alignment, distribution, spacing) идора мекунанд. Онҳо сохтани макетҳои хаттӣ ва бисёрқабата бо автоматии тартибро осон мекунанд.
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) // Илова кардани констрейнтҳо барои stackView, ки онро дар супервью ҷойгир мекунад
Интихоби усули тартиб додан вобаста ба мураккабии макет ва талаботи мутобиқсозӣ мебошад. Дар бештари барномаҳои муосир, Auto Layout бо Stack Views афзалият дорад.