Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UIViewのレイアウト更新メソッドを整理する
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
andfactory, inc.
October 25, 2018
Programming
450
0
Share
UIViewのレイアウト更新メソッドを整理する
10.25 and factory BeerBash#4 での@2takaanthony85さんのスライドです。
andfactory, inc.
October 25, 2018
More Decks by andfactory, inc.
See All by andfactory, inc.
Android開発初心者にありがちなこと
andfactory
0
250
Codableあるある
andfactory
0
220
Androidエンジニアあるある
andfactory
0
260
Collectionの罠
andfactory
0
210
Cocoa Touch Frameworkあるある
andfactory
0
350
iOS開発に慣れてきた時にやりがちあるある
andfactory
0
210
社内勉強会資料 - スクラム・アジャイル開発
andfactory
0
630
Other Decks in Programming
See All in Programming
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
550
PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい
higaki_program
0
170
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
150
The Monolith Strikes Back: Why AI Agents ❤️ Rails Monoliths
serradura
0
150
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
260
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
120
安いハードウェアでVulkan
fadis
1
890
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
320
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
310
モダンOBSプラグイン開発
umireon
0
200
Spec Driven Development: The End Of Vibe Coding | DevLand 2026
danielsogl
PRO
0
100
おれのAgentic Coding 2026/03
tsukasagr
1
130
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
24k
4 Signs Your Business is Dying
shpigford
187
22k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
160
GraphQLとの向き合い方2022年版
quramy
50
14k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
660
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
160
Writing Fast Ruby
sferik
630
63k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
670
How to make the Groovebox
asonas
2
2.1k
Transcript
UIViewͷϨΠΞτߋ৽ϝιουΛཧ͢Δ 2018/10/26 @2takaanthony85
who am I ? • ٢߉ʢTakahiro Yoshikawaʣ • @2takaanthony85 •
2 Swift, Go, JS… infrastructure
UIViewControllerUIViewͷϨΠΞτʹ ؔΘΔॲཧͬͯͨ͘͞Μ͋Γ·͢ΑͶʁ
None
None
಄ͷத͍ͬͺ͍ ͍ͭɺͲ͏͏ͷ͔ࠞཚɻɻɻ
None
ࠓ͢͜ͱ
UIViewͷϨΠΞτͷϝιουΛཧ͢Δ
ΞδΣϯμ • ϝιουΛཧͯ͠ΈΔ • ݸʑͷϝιουΛཧղ͢Δ • ٙͷղফ • ·ͱΊ
ΞδΣϯμ • ϝιουΛཧͯ͠ΈΔ • ݸʑͷϝιουΛཧղ͢Δ • ٙͷղফ • ·ͱΊ
ࠓϑΥʔΧε͢Δͷ • updateConsraints() • setNeedsUpdateConstraints() • updateConstraintsIfNeeded() • layoutSubviews() •
setNeedsLayout() • layoutIfNeeded()
1. ੍ͱϨΠΞτͰཧ
੍ͱϨΠΞτͰཧ ੍ ϨΠΞτ updateConstraints() layoutSubviews() setNeedsUpdateConstraits() setNeedsLayout() updateConstraintsIfNeeded() layoutIfNeeded()
2. ׂͰཧ
ׂͰཧ ੍ ϨΠΞτ ߋ৽͢Δͷ updateConstraints() layoutSubviews() ߋ৽Λݺͼग़͢ ʢεέδϡʔϦϯάʣ setNeedsUpdateConstraits() setNeedsLayout()
ߋ৽Λݺͼग़͢ ʢଈ࣌ʣ updateConstraintsIfNeeded() layoutIfNeeded()
ΞδΣϯμ • ϝιουΛཧͯ͠ΈΔ • ݸʑͷϝιουΛཧղ͢Δ • ٙͷղফ • ·ͱΊ
ΞδΣϯμ • ϝιουΛཧͯ͠ΈΔ • ݸʑͷϝιουΛཧղ͢Δ • ٙͷղফ • ·ͱΊ
੍ ϨΠΞτ ߋ৽͢Δͷ updateConstraints() layoutSubviews() ߋ৽Λݺͼग़͢ ʢεέδϡʔϦϯάʣ setNeedsUpdateConstraits() setNeedsLayout() ߋ৽Λݺͼग़͢
ʢଈ࣌ʣ updateConstraintsIfNeeded() layoutIfNeeded()
੍ ϨΠΞτ ߋ৽͢Δͷ updateConstraints() layoutSubviews() ߋ৽Λݺͼग़͢ ʢεέδϡʔϦϯάʣ setNeedsUpdateConstraits() setNeedsLayout() ߋ৽Λݺͼग़͢
ʢଈ࣌ʣ updateConstraintsIfNeeded() layoutIfNeeded()
updateConstraints() layoutSubviews() • UIComponentΛߋ৽͢Δͱ͜Ζ • ViewDidLoad() ViewDidLayoutSubviews()ʹࣅͯΔ • ݺͼग़͢ͷͰͳ͍
੍ ϨΠΞτ ߋ৽͢Δͷ updateConstraints() layoutSubviews() ߋ৽Λݺͼग़͢ ʢεέδϡʔϦϯάʣ setNeedsUpdateConstraits() setNeedsLayout() ߋ৽Λݺͼग़͢
ʢଈ࣌ʣ updateConstraintsIfNeeded() layoutIfNeeded()
੍ ϨΠΞτ ߋ৽͢Δͷ updateConstraints() layoutSubviews() ߋ৽Λݺͼग़͢ ʢεέδϡʔϦϯάʣ setNeedsUpdateConstraits() setNeedsLayout() ߋ৽Λݺͼग़͢
ʢଈ࣌ʣ updateConstraintsIfNeeded() layoutIfNeeded()
setNeedsConstraints() setNeedsLayout() • updateConstraints(),layoutSubviews()͕ ࣮ߦ͞ΕΔΑ͏ʹεέδϡʔϦϯά͢Δ • ࣮ߦ͞ΕΔλΠϛϯάiOS͕ ϨΠΞτΤϯδϯΛ࣮ߦ͢Δͷʹ͓ͤ • ViewControllerͳͲͰݺͼग़ͨΓ͢Δ
੍ ϨΠΞτ ߋ৽͢Δͷ updateConstraints() layoutSubviews() ߋ৽Λݺͼग़͢ ʢεέδϡʔϦϯάʣ setNeedsUpdateConstraits() setNeedsLayout() ߋ৽Λݺͼग़͢
ʢଈ࣌ʣ updateConstraintsIfNeeded() layoutIfNeeded()
੍ ϨΠΞτ ߋ৽͢Δͷ updateConstraints() layoutSubviews() ߋ৽Λݺͼग़͢ ʢεέδϡʔϦϯάʣ setNeedsUpdateConstraits() setNeedsLayout() ߋ৽Λݺͼग़͢
ʢଈ࣌ʣ updateConstraintsIfNeeded() layoutIfNeeded()
updateConstraintsIfNeeded() layoutIfNeeded() • updateConstraints(),layoutSubviews()͕͢ ͙ʹ࣮ߦ͞ΕΔΑ͏ʹݺͼग़͢ • setNeedsConstraints()setNeedsLayout() ΑΓύϑΥʔϚϯεѱ • ࣮ߦޙʹผͷॲཧΛΒ͍ͤͨͱ͖༻
ಈ͔ͯ͠ཧͯ͠ΈΔ
ߏ View(VC) ࢠView Component
Layout
Layout wࢠ7JFX $VTUPN7JFX ͷ MBZPVU4VC7JFXT͕ݺͼग़͞ΕΔ ʢ 7$ ͷํݺͼग़͞Εͳ͍ʣ
Layout
Layout wࢠ7JFX $VTUPN7JFX εέδϡʔ Ϧϯά͞Ε͍ͯͳ͍ͷͰɺݺͼग़͞Ε ͳ͍
Layout
Layout wɺࢠͲͪΒεέδϡʔϦϯά ͞ΕΔͯΔͷͰɺݺͼग़͞ΕΔ w͔Βࢠͷॱ൪Ͱॲཧ
Layout
Layout wεέδϡʔϦϯά͞Ε͍ͯΔͷͳ͍ ͷͰɺԿى͜Βͳ͍
Constraints
Constraints wࢠ7JFX $VTUPN7JFX ͷ VQEBUF$POTUSBJOUT͕ݺͼग़͞ΕΔ ʢ 7$ ͷํݺͼग़͞Εͳ͍ʣ
Constraints
Constraints wࢠ7JFX $VTUPN7JFX εέδϡʔ Ϧϯά͞Ε͍ͯͳ͍ͷͰɺݺͼग़͞Ε ͳ͍
Constraints
Constraints wɺࢠͲͪΒεέδϡʔϦϯά͞Ε ΔͯΔͷͰɺݺͼग़͞ΕΔ wࢠ͔Βͷॱ൪Ͱॲཧ
Constraints
Constraints wεέδϡʔϦϯά͞Ε͍ͯΔͷͳ͍ ͷͰɺԿى͜Βͳ͍
ΞδΣϯμ • ϝιουΛཧͯ͠ΈΔ • ݸʑͷϝιουΛཧղ͢Δ • ٙͷղফ • ·ͱΊ
ΞδΣϯμ • ϝιουΛཧͯ͠ΈΔ • ݸʑͷϝιουΛཧղ͢Δ • ٙͷղফ • ·ͱΊ
ٙʹࢥͬͨ͜ͱ 1. setNeedsLayout()Λݺͼग़ͨ͠Βɺ layoutIfNeeded()Λݺͼग़͞ͳ͍ͱ͍͚ ͳ͍ͷ͔ʁ 2. updateConstraints()ݺͼग़͞ΕͨΒɺ layoutSubviews()ݺͼग़͞ΕΔͷ͔ʁ 3. ͦͦ͜ΕΘͳ͍͍ͯ͘ͷͰʁ
ٙʹࢥͬͨ͜ͱ 1. setNeedsLayout()Λݺͼग़ͨ͠Βɺ layoutIfNeeded()Λݺͼग़͞ͳ͍ͱ͍͚ ͳ͍ͷ͔ʁ 2. updateConstraints()ݺͼग़͞ΕͨΒɺ layoutSubviews()ݺͼग़͞ΕΔͷ͔ʁ 3. ͦͦ͜ΕΘͳ͍͍ͯ͘ͷͰʁ
1 A.ηοτͰ༻͠ͳ͍͍ͯ͘ setNeedsLayout()ͷ߹ͷ࣮ߦλΠϛϯά γεςϜʹґଘ͢Δͷ͕ͩɺ λΠϛϯάͷࠩ΄΅ͳ͔ͬͨɻ
ٙʹࢥͬͨ͜ͱ 1. setNeedsLayout()Λݺͼग़ͨ͠Βɺ layoutIfNeeded()Λݺͼग़͞ͳ͍ͱ͍͚ ͳ͍ͷ͔ʁ 2. updateConstraints()ݺͼग़͞ΕͨΒɺ layoutSubviews()ݺͼग़͞ΕΔͷ͔ʁ 3. ͦͦ͜ΕΘͳ͍͍ͯ͘ͷͰʁ
ٙʹࢥͬͨ͜ͱ 1. setNeedsLayout()Λݺͼग़ͨ͠Βɺ layoutIfNeeded()Λݺͼग़͞ͳ͍ͱ͍͚ ͳ͍ͷ͔ʁ 2. updateConstraints()ݺͼग़͞ΕͨΒɺ layoutSubviews()ݺͼग़͞ΕΔͷ͔ʁ 3. ͦͦ͜ΕΘͳ͍͍ͯ͘ͷͰʁ
2 A.ݺͼग़͞Εͳ͍ ͨͩ͠ɺviewDidLayoutSubviews() ݺͼग़͞ΕΔͷͰɺҙ
ٙʹࢥͬͨ͜ͱ 1. setNeedsLayout()Λݺͼग़ͨ͠Βɺ layoutIfNeeded()Λݺͼग़͞ͳ͍ͱ͍͚ ͳ͍ͷ͔ʁ 2. updateConstraints()ݺͼग़͞ΕͨΒɺ layoutSubviews()ݺͼग़͞ΕΔͷ͔ʁ 3. ͦͦ͜ΕΘͳ͍͍ͯ͘ͷͰʁ
ٙʹࢥͬͨ͜ͱ 1. setNeedsLayout()Λݺͼग़ͨ͠Βɺ layoutIfNeeded()Λݺͼग़͞ͳ͍ͱ͍͚ ͳ͍ͷ͔ʁ 2. updateConstraints()ݺͼग़͞ΕͨΒɺ layoutSubviews()ݺͼग़͞ΕΔͷ͔ʁ 3. ͦͦ͜ΕΘͳ͍͍ͯ͘ͷͰʁ
2 A.ͦ͏͔͠Εͳ͍ ୯ҰͷίϯϙʔωϯτΛૢ࡞͢Δ͚ͩΈ͍ͨͳ ঢ়گͳΒΘͳ͍͍ͯ͘ ςΩετͷ͞ʹΑͬͯUILabelΛม͑Δ Ͱ͋ͬͨΓɺෳࡶͳUIͷߏͷ߹͕͍ॴ
ΞδΣϯμ • ϝιουΛཧͯ͠ΈΔ • ݸʑͷϝιουΛཧղ͢Δ • ٙͷղফ • ·ͱΊ
ΞδΣϯμ • ϝιουΛཧͯ͠ΈΔ • ݸʑͷϝιουΛཧղ͢Δ • ٙͷղফ • ·ͱΊ
·ͱΊʢ݁ہͲͷ໘Ͱ͏͔ʣ 1. ಈతʹUIͷมߋ͕͋Δͱ͖ →ඞཁ࠷ݶͰ͋ͱiOSʹͤΔ 2. ෳࡶͳUIߏͷͱ͖ →VCͱΓ͚ͨΓͯ͠ίʔυΛεοΩϦ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ