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
210
Androidエンジニアあるある
andfactory
0
250
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
Range on Rails ―「多重範囲型」という新たな選択肢が、複雑ロジックを劇的にシンプルにしたワケ
rizap_tech
0
6.6k
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
350
Catch Up: Go Style Guide Update
andpad
0
230
なぜGoのジェネリクスはこの形なのか? Featherweight Goが明かす設計の核心
ryotaros
7
1.1k
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
0
280
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
570
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
230
他言語経験者が Golangci-lint を最初のコーディングメンターにした話 / How Golangci-lint Became My First Coding Mentor: A Story from a Polyglot Programmer
uma31
0
170
CSC305 Lecture 06
javiergs
PRO
0
240
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
ソフトウェア設計の実践的な考え方
masuda220
PRO
4
590
品質ワークショップをやってみた
nealle
0
290
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Agile that works and the tools we love
rasmusluckow
331
21k
Balancing Empowerment & Direction
lara
4
690
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Statistics for Hackers
jakevdp
799
220k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
590
Scaling GitHub
holman
463
140k
The Pragmatic Product Professional
lauravandoore
36
6.9k
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ͱΓ͚ͨΓͯ͠ίʔυΛεοΩϦ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ