ฉันพบวิธีแก้ไขแถบสีขาวที่นี่ :
ตั้งค่าviewport-fit=cover
บน<meta>
แท็กวิวพอร์ตได้แก่ :
<meta name="viewport" content="initial-scale=1, width=device-width, height=device-height, viewport-fit=cover">
แถบสีขาวใน UIWebView จะหายไป:
วิธีการเอาพื้นที่สีดำ (โดย@dpogueในความคิดเห็นด้านล่าง) คือการใช้ภาพ LaunchStoryboardด้วยcordova-plugin-splashscreen
ที่จะเปลี่ยนภาพการเปิดตัวเดิมที่ใช้โดยคอร์โดวาโดยค่าเริ่มต้น ในการทำเช่นนั้นให้เพิ่มสิ่งต่อไปนี้ในแพลตฟอร์ม iOS ในconfig.xml
:
<platform name="ios">
<splash src="res/screen/ios/Default@2x~iphone~anyany.png" />
<splash src="res/screen/ios/Default@2x~iphone~comany.png" />
<splash src="res/screen/ios/Default@2x~iphone~comcom.png" />
<splash src="res/screen/ios/Default@3x~iphone~anyany.png" />
<splash src="res/screen/ios/Default@3x~iphone~anycom.png" />
<splash src="res/screen/ios/Default@3x~iphone~comany.png" />
<splash src="res/screen/ios/Default@2x~ipad~anyany.png" />
<splash src="res/screen/ios/Default@2x~ipad~comany.png" />
<!-- more iOS config... -->
</platform>
จากนั้นสร้างภาพที่มีขนาดต่อไปนี้ในres/screen/ios
(ลบภาพที่มีอยู่ออก):
Default@2x~iphone~anyany.png - 1334x1334
Default@2x~iphone~comany.png - 750x1334
Default@2x~iphone~comcom.png - 1334x750
Default@3x~iphone~anyany.png - 2208x2208
Default@3x~iphone~anycom.png - 2208x1242
Default@3x~iphone~comany.png - 1242x2208
Default@2x~ipad~anyany.png - 2732x2732
Default@2x~ipad~comany.png - 1278x2732
เมื่อลบแถบสีดำออกแล้วยังมีอีกสิ่งหนึ่งที่แตกต่างออกไปเกี่ยวกับ iPhone X ที่จะกล่าวถึง: แถบสถานะมีขนาดใหญ่กว่า 20px เนื่องจาก "รอย" ซึ่งหมายความว่าเนื้อหาใด ๆ ที่อยู่ด้านบนสุดของแอป Cordova ของคุณจะถูกบดบังด้วย :
แทนที่จะเข้ารหัสช่องว่างภายในพิกเซลคุณสามารถจัดการสิ่งนี้โดยอัตโนมัติใน CSS โดยใช้safe-area-inset-*
ค่าคงที่ใหม่ใน iOS 11
หมายเหตุ:ใน iOS 11.0 มีการเรียกใช้ฟังก์ชันในการจัดการค่าคงที่เหล่านี้constant()
แต่ใน iOS 11.2 Apple เปลี่ยนชื่อเป็นenv()
( ดูที่นี่ ) ดังนั้นเพื่อให้ครอบคลุมทั้งสองกรณีคุณต้องโอเวอร์โหลดกฎ CSS ด้วยทั้งสองและพึ่งพากลไกทางเลือกของ CSSเพื่อใช้ อันที่เหมาะสม:
body{
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
}
ผลลัพธ์ก็เป็นไปตามที่ต้องการเนื้อหาของแอปครอบคลุมเต็มหน้าจอ แต่ "รอย" ไม่บดบัง:
ฉันได้สร้างโครงการทดสอบ Cordova ซึ่งแสดงขั้นตอนข้างต้น: webview-test.zip
หมายเหตุ:
ปุ่มส่วนท้าย
- หากแอปของคุณมีปุ่มส่วนท้าย (เหมือนของฉัน) คุณจะต้องสมัคร
safe-area-inset-bottom
เพื่อหลีกเลี่ยงไม่ให้ปุ่มโฮมเสมือนทับซ้อนกันบน iPhone X
- ในกรณีของฉันฉันไม่สามารถใช้สิ่งนี้ได้
<body>
เนื่องจากส่วนท้ายอยู่ในตำแหน่งที่แน่นอนดังนั้นฉันจึงต้องใช้มันโดยตรงกับส่วนท้าย:
.toolbar-footer{
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
}
Cordova-ปลั๊กอินสถานะ
- ขนาดแถบสถานะมีการเปลี่ยนแปลงบน iPhone X ดังนั้นเวอร์ชันเก่าจึง
cordova-plugin-statusbar
แสดงผลไม่ถูกต้องบน iPhone X
- Mike Hartingtonได้สร้างคำขอดึงนี้ซึ่งใช้การเปลี่ยนแปลงที่จำเป็น
- สิ่งนี้ถูกรวมเข้ากับ
cordova-plugin-statusbar@2.3.0
รุ่นดังนั้นโปรดตรวจสอบให้แน่ใจว่าคุณใช้อย่างน้อยเวอร์ชันนี้เพื่อใช้กับสิ่งที่ใส่เข้าไปในพื้นที่ปลอดภัย
หน้าจอ
- ข้อ จำกัด ของกระดานเรื่องราวของ LaunchScreen เปลี่ยนไปใน iOS 11 / iPhone X ซึ่งหมายความว่าหน้าจอเริ่มต้นจะ "กระโดด" เมื่อเปิดตัวเมื่อใช้ปลั๊กอินเวอร์ชันที่มีอยู่ ( ดูที่นี่ )
- สิ่งนี้ถูกบันทึกไว้ในรายงานข้อผิดพลาดCB-13505 , PR Cordova-ios # 354 ที่ได้รับการแก้ไขและเผยแพร่ใน
cordova-ios@4.5.4
ดังนั้นโปรดตรวจสอบว่าคุณกำลังใช้cordova-ios
แพลตฟอร์มเวอร์ชันล่าสุด
การวางแนวอุปกรณ์
- เมื่อใช้ UIWebView บน iOS 11.0 การหมุนจากแนวตั้ง> แนวนอน> แนวตั้งทำให้
safe-area-inset
ไม่สามารถนำไปใช้ซ้ำได้ทำให้เนื้อหาถูกบดบังด้วยรอยบากอีกครั้ง (ดังที่เน้นโดยjmsในความคิดเห็นด้านล่าง)
- นอกจากนี้ยังเกิดขึ้นหากเปิดแอปในแนวนอนแล้วหมุนเป็นแนวตั้ง
- นี้ไม่ได้เกิดขึ้นเมื่อใช้ WKWebView
cordova-plugin-wkwebview-engine
ผ่าน
- รายงานเรดาร์: http://www.openradar.me/radar?id=5035192880201728
- อัปเดต : ดูเหมือนว่าจะได้รับการแก้ไขแล้วใน iOS 11.1
สำหรับการอ้างอิงนี่เป็นปัญหา Cordova ดั้งเดิมที่ฉันเปิดซึ่งรวบรวมสิ่งนี้: https://issues.apache.org/jira/browse/CB-13273