Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
UIViewのレイアウト更新メソッドを整理する
Search
andfactory, inc.
October 25, 2018
Programming
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
260
Codableあるある
andfactory
0
230
Androidエンジニアあるある
andfactory
0
270
Collectionの罠
andfactory
0
210
Cocoa Touch Frameworkあるある
andfactory
0
370
iOS開発に慣れてきた時にやりがちあるある
andfactory
0
220
社内勉強会資料 - スクラム・アジャイル開発
andfactory
0
660
Other Decks in Programming
See All in Programming
Railsバージョンを4倍にした話
optim
0
460
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
contenteditable と日本語入力に向き合う
colorful12
0
200
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
510
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
0
130
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
2
740
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
110
phperだってパンチカードでコーディングしたい
o0h
PRO
0
350
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
650
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
180
Featured
See All Featured
Between Models and Reality
mayunak
4
500
Statistics for Hackers
jakevdp
799
230k
Raft: Consensus for Rubyists
vanstee
142
7.8k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
The Curious Case for Waylosing
cassininazir
1
570
Amusing Abliteration
ianozsvald
1
350
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
A Modern Web Designer's Workflow
chriscoyier
699
190k
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ͱΓ͚ͨΓͯ͠ίʔυΛεοΩϦ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ