UIScreen applicationFrame возвращает неправильный прямоугольник при запуске приложения в альбомной ориентации (iPhone / iPad)

Вам нужно объявить пространство имен в XSLT и использовать его в выражениях XPath. Например ::

<xsl:stylesheet ... xmlns:my="http://www.mysite.com">

   <xsl:template match="/my:MyRoot"> ... </xsl:template>

</xsl:stylesheet>

Обратите внимание, что вы должны предоставить некоторый префикс, если вы хотите ссылаться на элементы из этого пространства имен в XPath. Хотя вы можете просто сделать xmlns="..." без префикса, и он будет работать для литеральных элементов результата, он не будет работать для XPath - в XPath, неподписанное имя всегда считается в пространстве имен с пустым URI, независимо от xmlns="..." в области.

21
задан jrtc27 1 February 2012 в 19:48
поделиться

4 ответа

Когда вы держите iPad в альбомной ориентации и запускаете приложение, контроллер вида изначально видит границы для портретной ориентации (даже если ориентация сообщает о альбомной ориентации). Затем контроллер представления получит сообщение для поворота в альбомную ориентацию, прежде чем оно появится.

6
ответ дан 29 November 2019 в 06:25
поделиться

[[UIScreen mainScreen] applicationFrame] всегда будет возвращать портретный прямоугольник, даже если приложение находится в ландшафтном режиме. Это связано с тем, что UIWindow никогда фактически не вращается, а просто изменяет преобразование rootViewController.view.

Чтобы убедиться, что вы можете напечатать объект корневого обзора в портретном и ландшафтном режимах, вы увидите что-то вроде этого:

Портрет:

<UIView: 0x96290e0; frame = (0 20; 768 1004); ...

Пейзаж:

<UIView: 0x96290e0; frame = (0 20; 768 1004); transform = [0, 1, -1, 0, 0, 0]; ...
2
ответ дан Hejazi 1 February 2012 в 19:48
поделиться

Я никогда не полагаюсь на [[UIScreen mainScreen] applicationFrame], особенно во время запуска приложения.

При создании представлений в коде используйте суперпредставление для установки кадра.

Если вы используете xibs с «симулированными элементами интерфейса», они будут иметь правильный размер и все будет отлично работать.

Приложения на основе UINavigationController

В случае приложения на основе UINavigationController возьмите кадр непосредственно из self.navigationController.view, не пытайтесь использовать [self loadView] и self.view.superview. UINavigationController использует «скрытые» подпредставления для выполнения своей работы, поэтому прямое суперпредставление не будет работать.

UINavigationController является особенным, потому что во время запуска приложения контроллер навигации изменяет размеры ваших представлений после вызова loadView. При автоматическом изменении размера вы получаете небольшой запас в нижней части экрана.

Почему бы не UIScreen

[[UIScreen mainScreen] applicationFrame] не работает надежно (особенно во время запуска приложения в альбомной ориентации). Мой опыт показывает, что свойство viewcontroller interfaceOrientation не будет соответствовать ориентации applicationFrame.

35
ответ дан bentford 1 February 2012 в 19:48
поделиться

Это так, как задумано. Вам следует запросить размер вашего супервизора и при необходимости скорректировать его.

5
ответ дан 29 November 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: