Перейти к содержанию
Fire Monkey от А до Я
  • 0

Поддежка экрана IPhoneX


Alex7wrt

Вопрос

Добрый день.

Совсем недавно появилась информация, что с апреля все публикуемые в App Store приложения должны обязательно поддерживать экран смартфона Apple iPhone X.

В связи с этим естественно напрашивается вопрос, как это реализовать в Rad Studio и что вообще подразумевается под поддержкой такого экрана - чтобы в приложении было предусмотрено место под выемку?

Кто в курсе, подскажите, что к чему.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Всем привет!

Ребят, поделитесь кто, как решает эту проблему?...

У меня основная проблема внизу экрана. приложение развернуто на весь экран и полоска (navigation area) перекрывает часть интерфейса.

Ссылка на комментарий
  • 0

В общем нашел вот такую функцию:

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.

Изменено пользователем juppy
Ссылка на комментарий
  • 0

А размер статусбара нельзя таким образом узнать? Если я правильно понял, на айфонах до 10-го он должен быть 20 пикселей, а начиная с 10-го - 44. Но как узнать это программно?

На свифте должно быть что-то типа

CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;

А как переделать на делфи?

Изменено пользователем gonzales
Ссылка на комментарий
  • 0

Ну судя по всему вот так

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 к сожалению нет. Может кто-нибудь проверить?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...