Slide 1

Slide 1 text

J1IPOF9ରԠͱ 6*4DSPMM7JFXͷDPOUFOU*OTFU ,":"$ٕज़෦ ,B[VNBTB/"("%0 30110/(*TXJGU

Slide 2

Slide 2 text

w ,B[VNBTB/"("%0 w ,":"$d w 5XJUUFS!L[NTOHE w ʢ౔ʣ/1$+ϑΟδʔΫϊʔϏε DNҎԼΫϥεग़৔༧ఆ w IUUQTOQDKKQDPOUFTUOFXHFOFSBUJPODMBTTJD 1SPpMF

Slide 3

Slide 3 text

2ݮྔதʹ৯΂ͯ΋ྑ͍΋ͷ͸ʁ ͓ण࢘ ύελྉཧ ͓ʹ͗Γ εΠʔπ ࠓ೔͔Βग़དྷΔݮྔΫΠζ

Slide 4

Slide 4 text

"શ෦0, ʢ˞ઁऔ͢ΔλΠϛϯά΍ɺຊؾ౓ʹΑΔʣ ࠓ೔͔Βग़དྷΔݮྔΫΠζ

Slide 5

Slide 5 text

2ͲͷτϨʔχϯά͕ے೑Λେ͖͘Ͱ͖Δʁ ϕϯνϓϨεLHYճ ϕϯνϓϨεLHYճ ࠓ೔͔Βग़དྷΔےංେΫΠζ

Slide 6

Slide 6 text

"ͲͪΒ΋ےංେ͢Δ ʢ˞ݶք·Ͱ௥͍ࠐΉ͜ͱ͕લఏʣ ࠓ೔͔Βग़དྷΔےංେΫΠζ

Slide 7

Slide 7 text

ϓϥίϨ8FEEJOH IUUQTQMBDPMFXFEEJOH %SFTTZCZϓϥίϨ IUUQTESFTTZQMBDPMFXFEEJOH ϓϥίϨ

Slide 8

Slide 8 text

ˎ8FC൛ IUUQTXFCMPCJDP ˎJ5VOFT"QQ4UPSF IUUQTJUVOFTBQQMFDPNKQBQQMPCJϩϏʔJE NU ˎ"OESPJE IUUQTQMBZHPPHMFDPNTUPSFBQQTEFUBJMT JEDPNLBZBDOBLBNBQIMKB ήʔϜ߈ུνϟοτ4/4 -PCJ

Slide 9

Slide 9 text

6QEBUFGPSJ1IPOF9

Slide 10

Slide 10 text

#VJMEXJUIJ044%, 9DPEFY

Slide 11

Slide 11 text

J1IPOF9ͷσΟεϓϨΠରԠ 4BGF"SFBରԠ ˠ6*4DSPMM7JFXͷදࣔྖҬ͕͓͔͍͠ɻௐ੔্͕ख͘Ͱ͖ͳ͍ɻ 6*4DSPMM7JFXͷ"VUP-BZPVUͱDPOUFOU*OTFUʹ͍͓ͭͯ͞Β͍ͯ͠ΈΔɻ

Slide 12

Slide 12 text

6*4DSPMM7JFX 6*5BCMF7JFX ͷ"VUP-BZPVUͰࠔΔ࣌ 6*/BWJHBUJPO#BS 6*4FBSDI#BS 6*5BCMF7JFX

Slide 13

Slide 13 text

DPOUFOU*OTFUͱ͸ 6*4DSPMM7JFXͷGSBNF DPOUFOU*OTFUUPQ

Slide 14

Slide 14 text

DPOUFOU*OTFUͱ͸ 6*4DSPMM7JFXͷGSBNF DPOUFOU*OTFUUPQ 6*4DSPMM7JFXίϯςϯπपลʹ ઃఆͰ͖Δ༨നͷ͜ͱ

Slide 15

Slide 15 text

6*4DSPMM7JFX 6*5BCMF7JFX ͷ"VUP-BZPVUͰࠔΔ࣌

Slide 16

Slide 16 text

6*4DSPMM7JFX 6*5BCMF7JFX ͷ"VUP-BZPVUͰࠔΔ࣌ Ṗͷεϖʔε

Slide 17

Slide 17 text

6*4DSPMM7JFX 6*5BCMF7JFX ͷ"VUP-BZPVUͰࠔΔ࣌ ͜͜͸ಉ͡Α͏ʹݟ͑Δ͕ɺ 6*5BCMF7JFX͕ը໘͍ͬͺ͍ʹ දࣔ͞Ε͍ͯͳ͍͜ͱ͕෼͔Δ

Slide 18

Slide 18 text

6*4DSPMM7JFX 6*5BCMF7JFX ͷ"VUP-BZPVUͰࠔΔ࣌ 6*4FBSDI#BSͷΈ্ʹҠಈ ͯ͠͠·͍ɺṖͷεϖʔε͕ൃੜ

Slide 19

Slide 19 text

DPOTUBOU 6*/BWJHBUJPO#BS6*4FBSDI#BSͷߴ͞ Ͱ 6*5BCMF7JFXͷUPQʹ੍໿Λ͔͚͍ͯΔɻ ˠ6*4FBSDI#BSͱ6*5BCMF7JFXͷίϯςϯπͷؒʹ ෆࣗવͳ伱͕ؒੜ·Εͯ͠·͏ɻ ˠ6*4FBSDI#BSͷڍಈ͸ɺ6*5BCMF7JFX͕ ը໘͍ͬͺ͍ʹදࣔ͞Ε͍ͯΔ͜ͱΛظ଴͍ͯ͠Δɻ 6*4DSPMM7JFX 6*5BCMF7JFX ͷ"VUP-BZPVUͰࠔΔ࣌

Slide 20

Slide 20 text

Ξϯνύλʔϯ ɾϔομʔʢϑολʔʣͳͲͷߴ͞ʹ߹Θͤͯɺ6*4DSPMM7JFXʹ"VUP -BZPVUΛ͔͚ͯ͠·͏ɻ ɾ$IJME7JFX$POUSPMMFS͔Β1BSFOU7JFX$POUSPMMFSͷ7JFXϑϨʔϜ ஋Λࢀরͯ͠ɺ6*4DSPMM7JFXʹ"VUP-BZPVUΛ͔͚ͯ͠·͏ɻ

Slide 21

Slide 21 text

w ඪ४ͷ6* 6*4FBSDI#BSͳͲ ௥Ճͨ࣌͠ʹɺෆࣗવͳ6*දࣔʹͳΔɻ w ϔομʔ΍ϑολʔͳͲʹ#MVSޮՌΛ෇͚͍ͨ࣌ʹࠔΔɻ w 1BSFOU7JFX$POUSPMMFSͱ$IJME7JFX$POUSPMMFSͷґଘੑ͕ߴ·Δʢϝϯ ςφϯε͠ਏ͍ʣɻ ࠔΔ͜ͱ·ͱΊ

Slide 22

Slide 22 text

"QQMFͷΨΠυϥΠϯʹԊ͏Α͏ʹ 6*4DSPMM7JFXΛ࣮૷͢Δ IUUQTEFWFMPQFSBQQMFDPNKQEPDVNFOUBUJPO6*4DSPMM7JFX@QHQEG

Slide 23

Slide 23 text

6*4DSPMM7JFX͸ը໘͍ͬͺ͍ʹදࣔ͢Δ self.tableView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ self.tableView.topAnchor.constraint(equalTo: self.view.topAnchor), self.tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor), self.tableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor), self.tableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor) ]) ˠϔομʔ΍ϑολʔͷߴ͞ʹ߹Θͤͯ6*4DSPMM7JFX ͷαΠζΛௐ੔ͨ͠Γ͠ͳ͍Α͏ʹ͢Δɻ

Slide 24

Slide 24 text

σϑΥϧτͰBEKVTUFE$POUFOU*OTFU͕༗ޮʹͳ͍ͬͯΔͨΊɺಛʹ DPOUFOU*OTFUͷௐ੔͸ෆཁɻ ˠBEKVTUFE$POUFOU*OTFUʹΑΓɺDPOUFOU*OTFU͕4BGF"SFBʹ߹ Θͤͯࣗಈௐ੔͞ΕΔɻ DPOUFOU*OTFUͷௐ੔ J04

Slide 25

Slide 25 text

DPOUFOU*OTFUͷௐ੔ J04 1BSFOU7JFX$POUSPMMFSͰ؅ཧ͍ͯ͠Δ7JFXͷϑϨʔϜʢϔομʔ΍ϑο λʔͳͲʣΛ$IJME7JFX$POUSPMMFSʹ౉͍ͨ͠৔߹ɻ ˠBEEJUJPOBM4BGF"SFB*OTFUΛ࢖͏ɻ ˠϔομʔʢϑολʔʣͷϑϨʔϜ෼ͷ༨നΛ $IJME7JFX$POUSPMMFSͰ؅ཧ͢Δ7JFXͷTBGF"SFB*OTFUTʹ଍͢͜ͱ ͕Ͱ͖Δɻ @available(iOS 11.0, *) override func viewSafeAreaInsetsDidChange() { super.viewSafeAreaInsetsDidChange() let childVCAdditionalSafeAreaInsets = UIEdgeInsetsMake(self.childVCAdditionalSafeAreaInsetsTop, 0, 0, 0) self.childVC.additionalSafeAreaInsets = childVCAdditionalSafeAreaInsets }

Slide 26

Slide 26 text

΋͠ɺBEKVTUFE$POUFOU*OTFUΛ࢖Θͳ͍ TDSPMM7JFXDPOUFOU*OTFU"EKVTUNFOU#FIBWJPSOFWFS ͱ͢Δ৔߹ɻ ˠWJFX%JE-BZPVU4VCWJFXT ͰɺTDSPMM7JFXDPOUFOU*OTFUΛௐ੔ɻ DPOUFOU*OTFUͷௐ੔ J04 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if #available(iOS 11.0, *) { self.tableView.contentInset = UIEdgeInsetsMake(self.view.safeAreaInsets.top, 0, self.view.safeAreaInsets.bottom, 0) self.tableView.scrollIndicatorInsets = self.tableView.contentInset } }

Slide 27

Slide 27 text

ʮBEKVTUFE$POUFOU*OTFUΛ࢖Θͳ͍৔߹ʯͱ΄΅ಉ͡ɻ ˠWJFX%JE-BZPVU4VCWJFXT ͷλΠϛϯάͰUPQ-BZPVU(VJEF CPUUPN-BZPVU(VJEFͷ஋ͱɺૠೖ͍ͨ͠JOTFU஋Λ଍ͯ͠ TDSPMM7JFXDPOUFOU*OTFUΛௐ੔ɻ ˠૠೖ͍ͨ͠JOTFU஋͸ɺ7JFX$POUSPMMFSͷੜ੒࣌ʹ౉͢ɻ DPOUFOU*OTFUͷௐ੔ J04Ҏલ override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if #available(iOS 11.0, *) { } else { self.topLayoutMarginConstraint.constant = 0 self.tableView.contentInset = UIEdgeInsetsMake(self.topLayoutGuide.length, 0, self.bottomLayoutGuide.length, 0) self.tableView.scrollIndicatorInsets = self.tableView.contentInset } }

Slide 28

Slide 28 text

DPOUFOU*OTFUͷௐ੔ J04Ҏલ // ChildViewController @available(iOS, deprecated: 11.0, message: "iOS11.0Ҏ߱͸ additionalSafeAreaInsets Ͱௐ੔͢Δɻ") private var additionalScrollViewContentInsetTop: CGFloat = 0.0 init(additionalScrollViewContentInsetTop: CGFloat) { self.additionalScrollViewContentInsetTop = additionalScrollViewContentInsetTop super.init(nibName: nil, bundle: nil) } ~~~ override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if #available(iOS 11.0, *) { // do nothing } else { let contentInset = UIEdgeInsetsMake(self.topLayoutGuide.length + self.additionalScrollViewContentInsetTop, 0, self.bottomLayoutGuide.length, 0) self.scrollView.contentInset = contentInset self.scrollView.scrollIndicatorInsets = self.scrollView.contentInset } }

Slide 29

Slide 29 text

ࢀߟ <>4VCNJUUJOHJ04BQQTUPUIF"QQ4UPSF IUUQTEFWFMPQFSBQQMFDPNJPTTVCNJU <>6*4DSPMM7JFXBEKVTUFE$POUFOU*OTFU IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJTDSPMMWJFX BEKVTUFEDPOUFOUJOTFU MBOHVBHFPCKD <>6*4DSPMM7JFXDPOUFOU*OTFU"EKVTUNFOU#FIBWJPS IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJTDSPMMWJFX DPOUFOUJOTFUBEKVTUNFOUCFIBWJPS MBOHVBHFPCKD <>J046*4DSPMM7JFXϓϩάϥϛϯάΨΠυ IUUQTEFWFMPQFSBQQMFDPNKQEPDVNFOUBUJPO6*4DSPMM7JFX@QHQEG

Slide 30

Slide 30 text

͋Γ͕ͱ͏͍͟͝·ͨ͠