Преобразование раскадровки с iPhone на iPad - PullRequest
216 голосов
/ 11 декабря 2011

У меня есть приложение iPhone, в котором есть раскадровка. Теперь я хочу предоставить iPad приложение тоже. Поэтому я спросил меня, есть ли функция, которая помогает мне преобразовать мою iPhone раскадровку в iPad раскадровку.

Чтобы быть конкретным:

Есть ли подобная функция или только ручной?

Ответы [ 21 ]

3 голосов
/ 23 октября 2014

Используя классы размеров XCode6, вам больше не нужно конвертировать раскадровку в iPad.Одну и ту же раскадровку можно использовать как для iPhone, так и для iPad, что избавляет вас от необходимости обновлять два файла.

Полученная раскадровка совместима с iOS7 +.

Подробнее об этом здесь:https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/AboutAdaptiveSizeDesign.html#//apple_ref/doc/uid/TP40014436-CH6-SW1

Используйте классы размеров, чтобы включить раскадровку или файл XIB для работы со всеми доступными размерами экрана.Это позволяет пользовательскому интерфейсу вашего приложения работать на любом устройстве iOS.

3 голосов
/ 12 марта 2014

Ради интереса, в XCode 5.1 и iOS 7.1 мне также нужно было изменить значения "toolVersion" и "systemVersion" на следующее:

toolsVersion="5023" systemVersion="13A603"

Без этого новый файл раскадровки не будет компилироваться

2 голосов
/ 22 августа 2017

Для Xcode10

  1. Просто дублируйте Main.storyboard

  2. Затем переименуйте файлы в Main_iPad.storyboard и Main_iPone.storyboard

  3. Установите соответствующие имена в .plist

enter image description here

4. Просто выберите правильное.раскадровка для настройки enter image description here

2 голосов
/ 27 марта 2014

Я следил за этой веткой, когда вчера мне сообщили об этой же проблеме.Шаги, которые я выполнил

  1. Для Xcode 5.1 мне пришлось провести некоторую очистку раскадровки iPhone, например пропустить reuseIdentifiers ячеек таблицы, предоставить идентификатор раскадровки для каждого контроллера, удалить неиспользуемые сцены.
  2. Скопируйте MainStoryboard_iPhone.storyboard на MainStoryboard_iPad.storyboard.
  3. С помощью редактора vi - измените targetRuntime="iOS.CocoaTouch" на targetRuntime="iOS.CocoaTouch.iPad"
  4. Измените код в MainStoryboard_iPad.storyboard с: <simulatedScreenMetrics key="destination" type="retina4"/> до <simulatedScreenMetrics key="destination"/>
  5. Откройте проект в Xcode.
  6. Изменили устройства развертывания на Универсальные - выберите вариант НЕ копировать раскадровку iPhone.
  7. Xcode по умолчанию будет использовать Deployment Target равным 7.1, позаботившись об устаревших функциях.
  8. Чтобы исправить ошибку неуместного представления в раскадровке iPad - изменено расположение кадров для контроллеров, выдающих ошибки.

Вот и все .. Спасибо всем за помощь ..

2 голосов
/ 16 марта 2014

Эта функциональность теперь встроена. Например, если изменить настройки проекта в «Сведения о развертывании -> Устройства с iPhone на Universal», появится следующий диалог:

enter image description here

1 голос
/ 21 декабря 2015

Существует действительно простое решение для версий Xcode, которые поддерживают классы размеров (протестировано в Xcode 7, которая является текущей версией на момент написания). Установите флажок «использовать классы размера» в файле раскадровки ( File Inspector ), подтвердите, что появится диалоговое окно. Затем снимите флажок с тем же флажком - Xcode спросит вас, хотите ли вы использовать эту раскадровку с iPhone или iPad, и соответствующим образом преобразовать экраны в ней. Нет необходимости напрямую редактировать файл раскадровки . Для iPad и iPhone просто скопируйте одну и ту же раскадровку и настройте одну для iPad и одну для iPhone, используя описанный метод.

И прежде чем кто-то предложит использовать классы размера - хотя они и хороши, они менее удобны для сильно настроенного пользовательского интерфейса, такого как игры и т. Д.

1 голос
/ 25 февраля 2014

Другой подход

  1. Добавить пустой-View-Controller с Navigation-Controller в iPad-раскадровку

  2. Изменить класс накласс вашего первого ViewController, используемого для iPhone, "fooViewController"

  3. Добавьте идентификатор раскадровки в раскадровку iPhone "fooViewController_storyboard_identifier" для первого ViewController

  4. Перейти к «fooViewController.m»

  5. Добавить bool Переменная bool nibWasLoadForIpad=false

  6. Перейти к viewDidLoad -Метод

if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && !nibWasLoadForIpad)
{
    nibWasLoadForIpad=true;
    UIStoryboard* Storyboard_iphone=[UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
    fooViewController *controller = [Storyboard_iphone instantiateViewControllerWithIdentifier:@"fooViewController_storyboard_identifier"];
    [self.navigationController pushViewController:controller animated:YES];
    self.modalPresentationStyle = UIModalPresentationCurrentContext;
}

(пс. Знайте, проблема в том, что фоновые изображения будут установлены в белый цвет)

1 голос
/ 10 августа 2013

Самый простой и надежный способ сделать это - скопировать вставку из раскадровки iPad.

  1. Создайте новую раскадровку и назовите ее как MainStoryboard_ipad.
  2. Сделайте ваше приложение универсальным, установив для свойства «Устройства» значение «Универсальный» на странице «Сводка» свойств цели для вашего проекта. enter image description here
  3. Откройте раскадровку iPhone, выберите все и скопируйте
  4. Откройте раскадровку iPad и вставьте.

Вам нужно будет изменить размер, но это может быть быстрее, чем воссоздание всей раскадровки.

0 голосов
/ 11 августа 2017

Я просто изменяю (дополнительно к ответу @tharkay):

 <device id="ipad9_7" orientation="landscape">

и прекрасно работает!

Я использую это в XCode 8.3.3

0 голосов
/ 04 июля 2013

Вы должны создать отчет об ошибке в Apple. Можно сказать, что это мой дубликат (10167030), открытый с сентября 2011 года. С моей точки зрения, разочаровывает то, что эта функция существовала в Xcode 3 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...