რა არის გამართვა?
sobes.tech AI
პასუხი AI-სგან
iOS զարգացման մեջ դասավորումը վերաբերում է օգտագործողի ինտերֆեյսի տարրերի (UIViews) տեղադրմանը միմյանց կամ նրանց կոնտեյների (սուպերվյու) նկատմամբ։ Հիմնական մոտեցումները՝
-
Ֆրեյմեր (Frames): Յուրաքանչյուր View-ի դիրքը և չափը (x, y, width, height) սահմանելը նրա սուբերվյուի կոորդինատային համակարգում։ Հարմար է պարզ, ֆիքսված մաքետների համար։
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)) -
Autorezizačný mask: Պարզ համակարգ՝ նախքան Auto Layout-ը։ Позволяет задавать, как View должен растягиваться и сжиматься при изменении размера его супервью. Ավելի քիչ ճկուն, քան Auto Layout-ը, և հաճախ անջատվում է Auto Layout-ի օգտագործման ժամանակ (
translatesAutoresizingMaskIntoConstraints = false). -
Stack Views (UIStackView UIKit-ում, VStack/HStack/ZStack SwiftUI-ում): Կոնտեյներներ, որոնք ավտոմատ կերպով կառավարում են իրենց զավակ View-ների (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-ի հետ համատեղ։