Alex7wrt Опубликовано 16 февраля, 2018 Поделиться Опубликовано 16 февраля, 2018 Добрый день. Совсем недавно появилась информация, что с апреля все публикуемые в App Store приложения должны обязательно поддерживать экран смартфона Apple iPhone X. В связи с этим естественно напрашивается вопрос, как это реализовать в Rad Studio и что вообще подразумевается под поддержкой такого экрана - чтобы в приложении было предусмотрено место под выемку? Кто в курсе, подскажите, что к чему. Цитата Ссылка на комментарий
0 juppy Опубликовано 21 февраля, 2020 Поделиться Опубликовано 21 февраля, 2020 Всем привет! Ребят, поделитесь кто, как решает эту проблему?... У меня основная проблема внизу экрана. приложение развернуто на весь экран и полоска (navigation area) перекрывает часть интерфейса. Цитата Ссылка на комментарий
0 juppy Опубликовано 24 февраля, 2020 Поделиться Опубликовано 24 февраля, 2020 (изменено) В общем нашел вот такую функцию: https://community.idera.com/developer-tools/platforms/f/ios-platform/71188/safe-area-layout Цитата {$IFDEF IOS} uses iOSapi.Helpers, iOSapi.UIKit; var FBottomBarHeight: Single; FBottomBarChecked: Boolean; {$ENDIF} function GetBottomBarHeight: Single; {$IFDEF IOS} var LResult: PSingle; {$ENDIF} begin {$IFDEF IOS} if FBottomBarChecked then Result := FBottomBarHeight else begin Result := 0; LResult := @Result; TThread.Synchronize(nil, procedure() begin if (not FBottomBarChecked) and (TiOSHelper.SharedApplication.windows.count > 0) and Assigned(TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).rootViewController) and Assigned(TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).rootViewController.view) then begin FBottomBarHeight := (TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).rootViewController.view.bounds.origin.y + TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).rootViewController.view.bounds.size.height) - (TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).safeAreaLayoutGuide.layoutFrame.origin.y + TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).safeAreaLayoutGuide.layoutFrame.size.height); FBottomBarChecked := True; end; LResult^ := FBottomBarHeight; end); end; {$ELSE} Result := 0; {$ENDIF} end; Проверил. На iPhone 11 Pro работает. На симуляторе iPhone 5 c IOS 9.0 вылетела ошибка: Цитата Process: SMMap [14019] Path: /Users/USER/Library/Developer/CoreSimulator/Devices/7547C9DD-CC76-4EAF-9CA8-8E98E5888194/data/Containers/Bundle/Application/B33A9F2B-F272-4C44-AB9F-9F756EB8BA1B/SMMap.app/SMMap Identifier: SMMap Version: 1.0.0 (1.0.0) Code Type: X86 (Native) Parent Process: launchd_sim [91357] Responsible: SMMap [14019] User ID: 501 Date/Time: 2020-02-24 23:20:21.865 +0300 OS Version: Mac OS X 10.14.5 (18F132) Report Version: 12 Anonymous UUID: 9D5CF81F-9807-FB21-AC90-239C8AF65B38 Time Awake Since Boot: 880000 seconds System Integrity Protection: disabled Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Application Specific Information: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FMXWindow safeAreaLayoutGuide]: unrecognized selector sent to instance 0x10866d20' abort() called CoreSimulator 681.17 - Device: iPhone 5 (7547C9DD-CC76-4EAF-9CA8-8E98E5888194) - Runtime: iOS 9.0 (13A344) - DeviceType: iPhone 5 terminating with uncaught exception of type NSException Появилась перменная safeAreaLayoutGuide в IOS 11.0+ https://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide Поэтому нужно проверять версию IOS. Изменено 24 февраля, 2020 пользователем juppy Цитата Ссылка на комментарий
0 gonzales Опубликовано 5 октября, 2020 Поделиться Опубликовано 5 октября, 2020 (изменено) А размер статусбара нельзя таким образом узнать? Если я правильно понял, на айфонах до 10-го он должен быть 20 пикселей, а начиная с 10-го - 44. Но как узнать это программно? На свифте должно быть что-то типа CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height; А как переделать на делфи? Изменено 5 октября, 2020 пользователем gonzales Цитата Ссылка на комментарий
0 gonzales Опубликовано 5 октября, 2020 Поделиться Опубликовано 5 октября, 2020 Ну судя по всему вот так function TSplashForm.GetStatusBarHeight: Single; {$IFDEF IOS} var LResult: PSingle; {$ENDIF} begin {$IFDEF IOS} if FStatusBarChecked then Result := FStatusBarHeight else begin Result := 0; LResult := @Result; TThread.Synchronize(nil, procedure() begin if (not FStatusBarChecked) and (TiOSHelper.SharedApplication.windows.count > 0) and Assigned(TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).rootViewController) and Assigned(TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).rootViewController.view) then begin FStatusBarHeight := TUIWindow.Wrap(TiOSHelper.SharedApplication.windows.objectAtIndex(0)).safeAreaLayoutGuide.layoutFrame.origin.y; FStatusBarChecked := True; end; LResult^ := FStatusBarHeight; end); end; {$ELSE} Result := 0; {$ENDIF} end; На 8-ом возвращает 20, как и должно быть. 10 к сожалению нет. Может кто-нибудь проверить? Цитата Ссылка на комментарий
Вопрос
Alex7wrt
Добрый день.
Совсем недавно появилась информация, что с апреля все публикуемые в App Store приложения должны обязательно поддерживать экран смартфона Apple iPhone X.
В связи с этим естественно напрашивается вопрос, как это реализовать в Rad Studio и что вообще подразумевается под поддержкой такого экрана - чтобы в приложении было предусмотрено место под выемку?
Кто в курсе, подскажите, что к чему.
Ссылка на комментарий
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.