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
andfactory, inc.
October 25, 2018
Programming
0
440
UIViewのレイアウト更新メソッドを整理する
10.25 and factory BeerBash#4 での@2takaanthony85さんのスライドです。
andfactory, inc.
October 25, 2018
Tweet
Share
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
200
Cocoa Touch Frameworkあるある
andfactory
0
350
iOS開発に慣れてきた時にやりがちあるある
andfactory
0
210
社内勉強会資料 - スクラム・アジャイル開発
andfactory
0
620
Other Decks in Programming
See All in Programming
CSC307 Lecture 06
javiergs
PRO
0
690
Fluid Templating in TYPO3 14
s2b
0
130
AgentCoreとHuman in the Loop
har1101
5
250
React Native × React Router v7 API通信の共通化で考えるべきこと
suguruooki
0
100
dchart: charts from deck markup
ajstarks
3
1k
高速開発のためのコード整理術
sutetotanuki
1
410
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
Oxlintはいいぞ
yug1224
5
1.4k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
CSC307 Lecture 08
javiergs
PRO
0
670
atmaCup #23でAIコーディングを活用した話
ml_bear
1
170
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
3
220
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
180
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Deep Space Network (abreviated)
tonyrice
0
67
RailsConf 2023
tenderlove
30
1.3k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
67
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
66
WCS-LA-2024
lcolladotor
0
450
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
110
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
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ͱΓ͚ͨΓͯ͠ίʔυΛεοΩϦ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ