{ "id": "173021", "key": "TIMOB-26837", "fields": { "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "20033", "name": "Release 9.0.0", "archived": false, "released": true, "releaseDate": "2020-03-18" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2020-01-07T14:38:03.000+0000", "created": "2019-02-19T22:57:25.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "breaking-change", "engArch", "ios", "statusbar" ], "versions": [ { "id": "19906", "description": "", "name": "Release 6.3.0", "archived": false, "released": true, "releaseDate": "2017-11-01" } ], "issuelinks": [], "assignee": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2020-01-07T14:38:03.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "*Summary:*\r\nWhen setting {{Ti.UI.Window}} property \"extendSafeArea\" to {{false}}, Titanium will layout the windows content so that it lies within the bounds of the device's insets (such as iPhoneX's notch, home indicator, and rounded corners). This prevents the window's content from being overlapped.\r\n\r\nOn iOS 11 and higher, the top translucent status bar is considered a top inset and Titanium will prevent it from overlapping the window's content. On iOS 10 and older OS versions, the top status bar overlaps the window's content\r\n\r\nThis is an inconsistency. The idea behind setting \"extendSafeArea\" to {{false}} is to avoid having the Titanium app developer from laying-out the UI themselves via \"safeAreaPadding\" to avoid overlap... as well as avoid as making assumptions about the top status bar height and hard-coding the value to \"20dp\".\r\n\r\n*Steps to reproduce:*\r\n# Build and run the below code on iOS 10.\r\n# Notice that the app's label is overlapped by the top status bar.\r\n# Run the same app on iOS 11.\r\n# Notice that the app's label is below the status bar. It is not overlapped.\r\n\r\n{code:javascript}\r\nvar window = Ti.UI.createWindow({\r\n\tlayout: \"vertical\",\r\n\textendSafeArea: false,\r\n});\r\nwindow.add(Ti.UI.createLabel({ text: \"Hello World\" }));\r\nwindow.open();\r\n{code}\r\n\r\n*Result on iOS 10:*\r\n !extendSafeArea-iOS10.png|thumbnail! \r\n\r\n*Result on iOS 11:*\r\n !extendSafeArea-iOS11.png|thumbnail! \r\n", "attachment": [ { "id": "66173", "filename": "extendSafeArea-iOS10.png", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-02-19T22:56:34.000+0000", "size": 98778, "mimeType": "image/png" }, { "id": "66172", "filename": "extendSafeArea-iOS11.png", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-02-19T22:56:34.000+0000", "size": 99879, "mimeType": "image/png" } ], "flagged": false, "summary": "iOS: \"extendSafeArea\" false should not allow status bar to overlap content on iOS 10 and older", "creator": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "446183", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~jquick] Property 'extendSafeArea' is for iOS 11+ only. And if this property is false, it excludes status bar from safe area. This is same as native iOS behaviour.", "updateAuthor": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-02-20T11:09:02.000+0000", "updated": "2019-02-20T11:09:02.000+0000" }, { "id": "446215", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~vijaysingh], I'm saying this is a usability issue.\r\n\r\nLook at it from an app developer's perspective where they're trying to make a \"portable\" app that works on both Android and iOS for all OS versions. When setting \"extendSafeArea\" to {{false}}, Titanium will guarantee that the insets do not overlap the content on Android and iOS 11+... except for older versions of iOS where app developers are forced to write special code and add \"20dp\" to the top of their layout. Meaning that the developer has to check the platform and OS version to handle this special case. This is a pain to deal with.\r\n\r\nThe screenshots I've posted above are a good example of this discrepancy.\r\n\r\nI already know how it works natively on Apple's end, but that doesn't mean that's how it should work in Titanium. The whole point of setting \"extendSafeArea\" to {{false}} is so that app developers won't have to worry about the insets overlapping the content. Otherwise they might as well as set it to {{true}} and handle it themselves... which they're forced to do anyways on iOS 10.\r\n", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-02-20T22:17:33.000+0000", "updated": "2019-02-20T22:17:33.000+0000" }, { "id": "453185", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "body": "PR - https://github.com/appcelerator/titanium_mobile/pull/11396\r\n\r\n@QE - Apart from test case mentioned in ticket, please verify test cases from TIMOB-26461 also.", "updateAuthor": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-12-14T00:06:11.000+0000", "updated": "2019-12-14T00:10:11.000+0000" }, { "id": "453467", "author": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Closing ticket, fix verified in SDK version {{9.0.0.v20200103081513}}. \r\n\r\nTest and other information can be found at:\r\nhttps://github.com/appcelerator/titanium_mobile/pull/11396", "updateAuthor": { "name": "smohammed", "key": "smohammed", "displayName": "Samir Mohammed", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-01-07T14:37:45.000+0000", "updated": "2020-01-07T14:37:45.000+0000" } ], "maxResults": 5, "total": 5, "startAt": 0 } } }