рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдБред

рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдпрд╛ NIB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдЪреАрдЬ рдХреЗ рдЕрдкрдиреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдХрдбрд╝реА рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред
рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдХреБрдЫ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░, рдЯреЗрдмрд▓ рд╡реНрдпреВ рдФрд░ рдбрд╛рдпрдирд╛рдорд┐рдХ-рдЖрдХрд╛рд░ рдХреА рд╕реЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди
рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ Xcode 9 рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ 4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк Xcode, Swift рдФрд░ CocoaPods рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред
рдЖрдЧреЗ рдХреА рджреЗрд░реА рдХреЗ рдмрд┐рдирд╛, рдЖрдЗрдП рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ: рдПрдХ рд╕рд░рд▓ рд╕рдВрдкрд░реНрдХ рдХрд╛рд░реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рдиред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдкрдХреЛ рдпрд╣ рд╕рд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛред
PureLayout рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛рдПрдВ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдк
Xcode рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ -> "рдПрдХ рдирдпрд╛ Xcode рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ"ред "рдПрдХрд▓ рджреГрд╢реНрдп рдРрдк" рдЪреБрдиреЗрдВ рдФрд░ "рдЕрдЧрд▓рд╛" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдЖрдк рдЬреИрд╕реЗ рдЪрд╛рд╣реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдирд╛рдо рджреЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЙрдиреНрдЯреЗрдХреНрдЯрдХрд╛рд░реНрдб рдХрд╣рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рднреА рддреАрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд┐рдлреНрдЯ рдЪреБрдиреЗрдВ, рдлрд┐рд░ рдЕрдЧрд▓рд╛ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрд┐рд╕реА рд╕реНрдерд╛рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЕрдирдЪреЗрдХ рдХрд░реЗрдВ "рдореЗрд░реЗ рдореИрдХ рдкрд░ Git рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдмрдирд╛рдПрдБред"
рдЪреВрдВрдХрд┐ рд╣рдо рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдпрд╛ рдПрдирдЖрдИрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП "рдореЗрди.рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб" рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рд╕рд╛рдорд╛рдиреНрдп" рдЯреИрдм рдкрд░, рддреИрдирд╛рддреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╛рдЧ рдвреВрдВрдвреЗрдВ рдФрд░ "рдореБрдЦреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ Xcode рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдордиреЗ "Main.storyboard" рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Xcode рдХреЛ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рдЬрд┐рд╕рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

ViewController рдмрдирд╛рдирд╛
рдпрджрд┐ рдЖрдк рдЕрднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдХрд╛рд▓реА рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХреЛрдИ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдмрдирд╛рдПрдВрдЧреЗред "AppDelegate.swift" рдЦреЛрд▓реЗрдВ рдФрд░
application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)
рдЕрдВрджрд░
application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)
, рдЗрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЪрд┐рдкрдХрд╛рдПрдБ:
self.window = UIWindow(frame: UIScreen.main.bounds) let viewController = ViewController() self.window?.rootViewController = viewController self.window?.makeKeyAndVisible()
рдпрд╣ рдХреЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ "ViewController.swift" рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, "ViewController.swift" рдкрд░ рдЬрд╛рдПрдВ рдФрд░
viewDidLoad()
рд╡рд┐рдзрд┐ рдореЗрдВ, рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдбрд╛рд▓реЗрдВ:
self.view.backgroundColor = .blue
рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдПрдВред
Xcode рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "hotO" рд╣реЙрдЯрдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдЬрд┐рд╕реЗ рдЖрдк рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджрд░реНрдЬ рдХрд░реЗрдВ, рдЬрд┐рдирд╕реЗ рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЖрдкрдХреЗ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреА рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдмреЗрд╢рдХ, рд╣рдо рдЗрд╕ рдШреГрдгрд┐рдд рдиреАрд▓реЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдмрджрд▓рдХрд░ рд╕рдлреЗрдж рд░рдВрдЧ рдореЗрдВ рдмрджрд▓
.blue
ред
рдпреВрдЖрдИ рд╡рд┐рдХрд╛рд╕
рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред PureLayout рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ рдЯрд░реНрдорд┐рдирд▓ рдФрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реАрдбреА рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдПрдХ рд╕реНрдерд╛рди, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЦреАрдВрдЪреЗрдВ рдФрд░ "рдПрдВрдЯрд░" рджрдмрд╛рдПрдВред рдЕрдм рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдЕрдВрджрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
- рдлрд▓реА
- рдлрд▓реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдпрд╣ рджреВрд╕рд░реА рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЙрд╕рдХреЗ рдмрд╛рдж, Xcode рдХреЛ рдмрдВрдж рдХрд░реЗрдВ, рдлрд╛рдЗрдВрдбрд░ рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдЦреЛрд▓реЗрдВ, рдФрд░ рдЖрдкрдХреЛ "<рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо> .xcworkspace" рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рд╣рдо рдХрднреА рдХреЛрдХреЛрдЖрдкреЛрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓реЗрдВрдЧреЗред рдЕрдм "рдкреЙрдбрдлрд╛рдЗрд▓" рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдвреВрдВрдвреЗрдВ рдФрд░ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ
use_frameworks!
рддрд╣рдд рдирд┐рдореНрди рдкрдВрдХреНрддрд┐
use_frameworks!
pod тАЬPureLayoutтАЭ
рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдлрд┐рд░ рд╕реЗ
pod install
рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ "рдХрдорд╛рдВрдб + рдмреА" рджрдмрд╛рдХрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред
рдХреЙрдлрд╝реА рддреЛрдбрд╝рдирд╛
рдЕрдм рдЬрдм рд╕рдм рдХреБрдЫ рд╕реЗрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЕрд╕рд▓реА рдХрд╛рдо рд╕реЗред "ViewController.swift" рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдХрдк рдХреЙрдлреА рдкрдХрдбрд╝реЛ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

ImageView рдмрдирд╛рдПрдВ
import UIKit
рддрд╣рдд
import PureLayout
рд▓рд╛рдЗрди рдбрд╛рд▓реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред рдлрд┐рд░, рдХреНрд▓рд╛рд╕ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдФрд░ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░, рд╣рдо рдЖрд▓рд╕реА (рдЖрд▓рд╕реА)
Avatar ImageView
рдЪрд░ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
lazy var avatar: UIImageView = { let imageView = UIImageView(image: UIImage(named: "avatar.jpg")) imageView.autoSetDimensions(to: CGSize(width: 128.0, height: 128.0)) imageView.layer.borderWidth = 3.0 imageView.layer.borderColor = UIColor.lightGray.cgColor imageView.layer.cornerRadius = 64.0 imageView.clipsToBounds = true return imageView }()
рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП, рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдХрд┐рд╕реА рднреА рдЫрд╡рд┐ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдЕрд╡рддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕реЗ <рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо> рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Xcode рдореЗрдВ рдЦреАрдВрдЪреЗрдВ, рдЬрд┐рд╕реЗ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ "рдХреЙрдиреНрдЯреИрдХреНрдЯрдХрд╛рд░реНрдб" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ "рдХреЙрдкреА рдЖрдЗрдЯрдо" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЪреЗрдХ рдХрд░реЗрдВ ред

рдЙрд╕рдХреЗ рдмрд╛рдж, "avatar.jpg" рдХреЗ рдмрдЬрд╛рдп UIImage рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд▓рд┐рдЦреЗрдВред
рдЖрдк рдореЗрдВ рд╕реЗ рдЬреЛ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЖрд▓рд╕реА рдЪрд░ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рдХреЗ рд╕рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрд░рдореНрдн рдореЗрдВ (рдпрд╛ рдХреБрдЫ рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЬрдм рддрдХ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдЬрд░реВрд░рдд рди рд╣реЛ рдпрд╛ рдмреБрд▓рд╛рдпрд╛ рди рдЬрд╛рдПред ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрд▓рд╕реА рдЪрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд╛рдж рдХреЗ рдмрд┐рдВрджреБ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢рдХреНрддрд┐ рдФрд░ рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рдмрдЪрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред
PureLayout рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдЕрдВрджрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд╛рдЗрди
imageView.autoSetDimensions (to: CGSize (width: 128.0, height: 128.0))
рдПрдХреНрд╢рди рдореЗрдВ рдкреНрдпреЛрд░рд▓рд╛рдпрдЖрдЙрдЯ рд╣реИред рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо UIImageView рдХреА рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ NSLayoutConstraints рд╡рд┐рд╢рд╛рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдЕрджреНрднреБрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рдЧреЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рдХреЛрдгреАрдп рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЛ рдЗрд╕рдХреА рдЪреМрдбрд╝рд╛рдИ рдпрд╛ рдКрдБрдЪрд╛рдИ рд╕реЗ рдЖрдзрд╛ рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ 64.0 рдЕрдВрдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
clipsToBounds
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ
true
рд╕реЗрдЯ рдХрд░реЗрдВ, рдЬреЛ рдЫрд╡рд┐ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕ рд╕рдм рдХреБрдЫ рдХреЛ рдХреНрд▓рд┐рдк рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рдмрд╛рд╣рд░ рд╣реИ рдЬреЛ рд╣рдо рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдлрд┐рд░ рд╣рдо рдПрдХ UIView рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдЬреЛ рдЧреНрд░реЗ рдкреЗрдВрдЯ рдЕрд╡рддрд╛рд░ рдХреЗ рдкреАрдЫреЗ рджреГрд╢реНрдп рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд▓рд╕реА рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ:
lazy var upperView: UIView = { let view = UIView() view.autoSetDimension(.height, toSize: 128) view.backgroundColor = .gray return view }()
рд╕рдмрд╡реНрдпреВ рдЬреЛрдбрд╝рдирд╛
рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП рдПрдХ
func addSubviews ()
рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╡рд┐рдЪрд╛рд░реЛрдВ (рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ) рдХреЛ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
func addSubviews() { self.view.addSubview(avatar) self.view.addSubview(upperView) }
рдЕрдм
viewDidLoad (): self.addSubviews ()
рд▓рд┐рдП рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ
рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдирд╛
рдмрд╕ рд╣рдо рдХрд┐рддрдиреА рджреВрд░ рдЖ рдЧрдП рд╣реИрдВ рдЗрд╕рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрди рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╕реАрдорд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬрд┐рд╕реЗ
func setupConstraints()
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ:
func setupConstraints() { avatar.autoAlignAxis(toSuperviewAxis: .vertical) avatar.autoPinEdge(toSuperviewEdge: .top, withInset: 64.0) upperView.autoPinEdge(toSuperviewEdge: .left) upperView.autoPinEdge(toSuperviewEdge: .right) upperView.autoPinEdgesToSuperviewEdges(with: .zero, excludingEdge: .bottom) }
рдЕрдм рдЕрдВрджрд░ рджреЗрдЦреЗрдВ
setupConstraints()
viewDidLoad()
рдХреЙрд▓
setupConstraints()
, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░:
self.setupConstraints()
ред
addSubviews()
рдХреЙрд▓рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЗрд╕ AFTER рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдЕрдВрддрд┐рдо рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЕрд╡рддрд╛рд░ рдХреЛ рд╕рдмрд╕реЗ рдЖрдЧреЗ рд▓рд╛рдПрдВ
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░рд╛
upperView
рдЕрд╡рддрд╛рд░ рдХреЗ рдКрдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ
upperView
subviews
рд╕реЗ рдкрд╣рд▓реЗ
upperView
рд░реВрдк рдореЗрдВ рдПрдХ рдЕрд╡рддрд╛рд░ рдЬреЛрдбрд╝рд╛, рдФрд░ рдЪреВрдВрдХрд┐ рдпреЗ
upperView
рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдореЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдЗрди рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЪрд╛рд▓ рд╣реИ рдЬреЛ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рддреН:
self.view.bringSubview (toFront: avatar)
ред
рдпрд╣ рд╡рд┐рдзрд┐ рдЕрд╡рддрд╛рд░ рдХреЛ рдвреЗрд░ рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧреА, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЪреБрдиреЗрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╡реЗ рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╡реЗ рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрдЯреНрдпреВрд╢рди рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдпрд╣ рдпрд╛рдж рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╕рдм-рдЯреЗрд╕реНрдЯ рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯрд┐рдВрдЧ рд╡реНрдпреВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рдФрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЦрдВрдбрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рдПрдБ
рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдЦрдВрдбрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдПрдХ рдЧреНрд░реЗ рдмрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддреАрди рдЦрдВрдб рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдПрдХ рдЦрдВрдбрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░реЗрдВ:
lazy var segmentedControl: UISegmentedControl = { let control = UISegmentedControl(items: ["Personal", "Social", "Resum├и"]) control.autoSetDimension(.height, toSize: 32.0) control.selectedSegmentIndex = 0 control.layer.borderColor = UIColor.gray.cgColor control.tintColor = .gray return control }()
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рд╣рдорд╛рд░реЗ рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред рд╣рдордиреЗ
selectedSegmentIndex
рдХреЛ 0 рдкрд░ рд╕реЗрдЯ
selectedSegmentIndex
рд╣реИ, рдЬреЛ рдХрд┐ рдЖрд░рдВрднрд┐рдХрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкрд╣рд▓реЗ рдЦрдВрдб рдХреЛ рдЪреБрдирдиреЗ / рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЦрдВрдбрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдмрд╛рдХреА рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╢реИрд▓реА рд╣реИред
рдЕрдм рд╣рдо рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ
addCubviews(): self.view.addSubview(segmentedControl)
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдбрд╛рд▓рдХрд░ рдПрдХ
addCubviews(): self.view.addSubview(segmentedControl)
рдХреЗ рд░реВрдк рдореЗрдВ
addCubviews(): self.view.addSubview(segmentedControl)
рдФрд░ рдЗрд╕рдХреА рд╕реАрдорд╛рдПрдБ рдЗрд╕ рддрд░рд╣ рд╣реЛрдВрдЧреА:
segmentedControl.autoPinEdge(toSuperviewEdge: .left, withInset: 8.0) segmentedControl.autoPinEdge(toSuperviewEdge: .right, withInset: 8.0) segmentedControl.autoPinEdge(.top, to: .bottom, of: avatar, withOffset: 16.0)
рд╣рдо рдЦрдВрдбрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕реБрдкрд░рд╡рд╛рдЗрд╡реЗ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдереЛрдбрд╝рд╛ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ рд╕реНрдХреНрд░реАрди рдХреЗ рдХрд┐рдирд╛рд░реЗ рдкрд░ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВ, рдореИрдВ рддрдерд╛рдХрдерд┐рдд рдЖрда-рдмрд┐рдВрджреБ рдЧреНрд░рд┐рдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рд╕рднреА рджреВрд░реА рдФрд░ рдЖрдХрд╛рд░ рдЖрда рдХреЗ рдЧреБрдгрдХ рд╣реИрдВред рдореИрдВ рдЦрдВрдбрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╡рд╣реА рдХрд░рддрд╛ рд╣реВрдВред рдЕрдВрддрд┐рдо рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ 16 рдЕрдВрдХреЛрдВ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЕрд╡рддрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╢реАрд░реНрд╖ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред
func setupConstraints()
рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕реАрдорд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж
func setupConstraints()
рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝рдирд╛
рдЕрдм рд╣рдо рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ "рд╕рдВрдкрд╛рджрди" рдмрдЯрди рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд▓рд╕реА рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
lazy var editButton: UIButton = { let button = UIButton() button.setTitle("Edit", for: .normal) button.setTitleColor(.gray, for: .normal) button.layer.cornerRadius = 4.0 button.layer.borderColor = UIColor.gray.cgColor button.layer.borderWidth = 1.0 button.tintColor = .gray button.backgroundColor = .clear button.autoSetDimension(.width, toSize: 96.0) button.autoSetDimension(.height, toSize: 32.0) return button }()
рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ рдХрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ
button.setTitle
рдФрд░
button.setTitleColor
button.setTitle
рдФрд░
button.setTitleColor
рдХреЛ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░рдХреЗ рд╢реАрд░реНрд╖рдХ рдФрд░ рдЙрд╕рдХрд╛ рд░рдВрдЧ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ
button.setTitleColor
ред рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рд╣рдо рд╕реАрдзреЗ рдЕрдкрдиреЗ
titleLabel
рдкрд╣реБрдБрдЪрдХрд░ рдПрдХ рдмрдЯрди рдХрд╛ рд╢реАрд░реНрд╖рдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдЬреНрдп рд╣реИрдВ, рдФрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЗрдбрд░ / рд░рдВрдЧ рд░рдЦрдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд╣реЛрдВрдЧреЗред
рдЕрдм рдмрдЯрди рдХреЛ рдмрд╛рдХреА рдШрдЯрдХреЛрдВ рдХреА рддрд░рд╣ рдПрдХ рд╕рдмрд╡реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдирд┐рдореНрди рдкреНрд░рддрд┐рдмрдВрдз рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдИ рджреЗ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
editButton.autoPinEdge(.top, to: .bottom, of: upperView, withOffset: 16.0) editButton.autoPinEdge(toSuperviewEdge: .right, withInset: 8.0)
рдпрд╣рд╛рдВ рд╣рдордиреЗ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕рд╣реА рдФрд░ рдКрдкрд░реА рд╕реАрдорд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдПрдХ рдЖрдХрд╛рд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдХреБрдЫ рдФрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЕрдм рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдБ:

рд╣рд╛рд▓ рдХреЗ рдХреБрдЫ рдиреЛрдЯ
рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ, рдЬрд┐рддрдиреЗ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВред рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдЪрд╛рд░ рдмрдирд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЛ рдХрдард┐рди рд▓рдЧрддреЗ рд╣реИрдВред рд╕рд░рд▓ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрдард┐рдирд╛рдИ рдмрдврд╝рд╛рдПрдВред рдХрд╛рдЧрдЬрд╝ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдПрдХ рд╕рд╛рде рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдЧрд╛рдЗрдб рдХреЛ рдХреЛрдб рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░, рдЯреЗрдмрд▓ рд╡реНрдпреВ рдФрд░ рдбрд╛рдпрдирд╛рдорд┐рдХ-рдЖрдХрд╛рд░ рдХреА рд╕реЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред