Преобразование раскадровки с iPhone на iPad

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

Конкретно:

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

Ответ 1

Я нашел своеобразное решение:

  • Дублируйте свою раскадровку iPhone и переименуйте ее MainStoryboard_iPad.storyboard

  • Закройте Xcode, а затем откройте этот файл в любом текстовом редакторе.

  • Найдите targetRuntime="iOS.CocoaTouch" и измените его на targetRuntime="iOS.CocoaTouch.iPad"

  • Измените код в MainStoryboard_iPad.storyboard:

    <simulatedScreenMetrics key="destination" type="retina4"/> to

    <simulatedScreenMetrics key="destination"/>

  • Теперь сохраните все и снова запустите Xcode. IPad-Storyboard имеет то же содержимое, что и iPhone файл, но все может быть расстроено.

Это спасло мне часы - надеюсь, это поможет вам

Ответ 2

Если вы создали универсальный проект, по умолчанию будет создан пустой раскладной iPad, вам просто нужно выбрать iPhone раскадровки, выбрать все (Command + A), скопировать (Command + C) и вставить его на раскадровку iPad. Перед компиляцией обязательно переместите точку входа из пустой раскадровки в новую скопированную раскадровку.

Ответ 3

Это не работало для меня. Я сделал что-то немного другое.

  • Создайте новый файл панели объявлений для версии для iPad.
  • Откройте как новый файл, так и файл, который я хочу скопировать в textwrangler (текстовый редактор)
  • Скопировал XML-текст из старого файла в новый файл между этими тегами xml
  • Первый тег <scenes> <!--Contents View Controller-->
  • Вставить здесь
  • Конец тегов </class> </classes>

Это сработало для меня. У меня появился новый макет с подключенными моими выходами, что само по себе спасло меня несколько часов.

Ответ 4

1. Create New Storyboard file with MainStoryboard_iPad.storyboard
2. Copy All the views from MainStoryboard and paste to MainStoryboard_iPad.storyboard

Ответ 5

Из чтения многих потоков в stackoverflow я обнаружил, что решение -

1.Подробнее сканируй свой iPhone-раскадровки и переименуйте его. MainStoryboard_iPad.storyboard

2. щелкните правой кнопкой мыши раскадровку → "открыть как" → "Исходный код".

3.Поиск targetRuntime = "iOS.CocoaTouch" и изменить его на targetRuntime = "iOS.CocoaTouch.iPad"

5.Поиск <simulatedScreenMetrics key="destination" type="retina4"/> и изменить его на <simulatedScreenMetrics key="destination"/>

4. Теперь сохраните все и щелкните правой кнопкой мыши на MainStoryboard_iPad.storyboard "open as" → "IOS StoryBoard" 5. вы также можете изменить свои ограничения. Это все, что вы сделали.

Ответ 6

1 - Создайте "MainStoryboard_iPad.storyboard";

2 - Щелкните правой кнопкой мыши по "MainStoryboard_iPhone.storyboard" и "Открыть как → Исходный код". Скопируйте все,

3 Щелкните правой кнопкой мыши по "MainStoryboard_iPad.storyboard" и "Открыть как → Исходный код". Вставьте все. Теперь поиск и изменение:

  • targetRuntime="iOS.CocoaTouch" to targetRuntime="iOS.CocoaTouch.iPad"
  • type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" to type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.iPad.XIB"

4 - Сохранить. Теперь снова откройте, но используя конструктор интерфейса. Вам нужно будет только переустановить.

Этот метод также можно использовать для файлов .xib.

Ответ 7

Это происходит по-другому, но я смог сделать выбор всех и скопировать в своем раскадровке iPad (~ 35 сцен) и вставить его в свою раскадровку iPhone. Размеры сцены были автоматически скорректированы. Я видел только две проблемы: мне пришлось заменить UISplitViewController (так как это только iPad), а фон по умолчанию стал прозрачным, а не серым (все еще работает над исправлением, что правильно, без ручной настройки фона для всего).

EDIT: кажется, что фон по умолчанию для UITableView в инспекторе атрибутов довольно странный. Мне пришлось вручную установить фон в "Цвет фона таблицы групп" для сгруппированных табличных представлений и "Белый цвет" для негрупповых табличных представлений. Затем он отображался как "По умолчанию" (я предполагаю, так как тогда он соответствовал жестко заданному значению). - На самом деле, еще проще, переход с "Сгруппированный" на "Статический" и обратно выглядит как reset по умолчанию.

Ответ 8

Здесь что-то, что спасло меня и помогло вам с навыками Python.

Я создаю приложение за последние два месяца, сосредоточившись только на iPad, итерации UX с командой.

Сегодня основное внимание было уделено созданию версии iPhone, следуя вышеизложенным шагам (спасибо!), но я не хотел, чтобы затем изменять все элементы ui из размеров iPad в редакторе визуальных раскадров.

Итак, я написал этот маленький пиктон python script для сканирования через файл раскадровки для x, y, width, height и scale all down by by ratio 320./768. Позвольте мне просто сосредоточиться на тонкой настройке.

  • Скопируйте раскадровку iPad в новый файл. (например, iPhoneStoryboard.storyboard)

  • Запустите script ниже с именем файла скопированной раскадровки в качестве первого параметра.

  • Будет генерировать выходной файл с суффиксом _adjusted.storyboard(например, iPhoneStoryboard.storyboard_adjusted.storyboard)

Надеюсь, что это поможет...

import re
import sys
import math

afile = sys.argv[1]

scale = 320./768.

number_pattern = '[-0-9]+(.[0-9]+)?'
#width_pattern = 'width="[-0-9]+( ?px)?"'
width_pattern = 'width="[-0-9]+(.[0-9]+)?( ?px)?"'
height_pattern = 'height="[-0-9]+(.[0-9]+)?( ?px)?"'
x_pattern = 'x="[-0-9]+(.[0-9]+)?( ?px)?"'
y_pattern = 'y="[-0-9]+(.[0-9]+)?( ?px)?"'


def replacescaledvalue(scale,pattern,sometext,replacefmt) :
    ip = re.search(pattern, sometext, re.IGNORECASE)
    if(ip) :
        np = re.search(number_pattern,ip.group(0))
        if(np) :
            val = float(np.group(0))
            val = int(math.floor(val*scale))
            sval = replacefmt+str(val)+'"'#+'px"'
            newtext = re.sub(pattern,sval,sometext)
            return newtext
    else :
        return sometext

fin = open(afile)
fout = open(afile+"_adjusted.storyboard", "wt")
for line in fin:
    newline = line
    newline = replacescaledvalue(scale,width_pattern,newline,'width="')
    newline = replacescaledvalue(scale,height_pattern,newline, 'height="')
    newline = replacescaledvalue(scale,x_pattern,newline, 'x="')
    newline = replacescaledvalue(scale,y_pattern,newline, 'y="')
#   print newline
    fout.write( newline )

fin.close()
fout.close()

Ответ 9

Перейдите в свою целевую сводку и измените устройства на универсальные, затем спуститесь вниз и установите версию ipad на любой раскадровки, который вам нравится, включая скопированный и переименованный, если хотите.

Ответ 10

Как быстрая записка для тех, у кого могла быть проблема с этим:

Моя проблема:

Содержимое раскадровки скопировано красиво в новый файл платы, который я добавил. Тем не менее, это не повлияет на мой iPad. Заметив, что мне пришлось переключить назначенный раскадровки для цели сборки (см. Изображение), пусть изменения покажут.

Я бы разместил изображение, если бы у меня были очки, но настройка находится в:

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

Оттуда выберите свою раскадровку под "основным интерфейсом".

Спасибо за сообщение, я надеюсь, что это упоминание поможет где-то зацепиться.

Ответ 11

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

toolsVersion="5023" systemVersion="13A603"

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

Ответ 12

Используя классы размера 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.

Ответ 13

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

enter image description here

Ответ 14

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

  • Для Xcode 5.1 мне пришлось сделать некоторую очистку раскадровки iPhone, например, отсутствие повторных идентификаторов ячеек таблицы, предоставить идентификатор панели рассказов для каждого контроллера, удалить неиспользуемые сцены.
  • Скопируйте MainStoryboard_iPhone.storyboard в MainStoryboard_iPad.storyboard.
  • Использование редактора vi - изменено targetRuntime="iOS.CocoaTouch" на targetRuntime="iOS.CocoaTouch.iPad"
  • Измените код в MainStoryboard_iPad.storyboard от: <simulatedScreenMetrics key="destination" type="retina4"/> до <simulatedScreenMetrics key="destination"/>
  • Откройте проект в Xcode.
  • Изменены устройства развертывания Universal - выберите вариант НЕ копировать раскадровку iPhone.
  • Xcode по умолчанию установит целевой объект 7.1, позаботится об устаревших функциях.
  • Исправить ошибочную ошибку отображения в iPad Storyboard - Изменена форма кадра для контроллеров, дающих ошибки.

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

Ответ 15

Для Xcode10

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

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

  • Задайте соответствующие имена в .plist

введите описание изображения здесь

4. Просто выберите нужную .storyboard для настройки введите описание изображения здесь

Ответ 16

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

  • Создайте новую раскадровку и назовите ее что-то вроде MainStoryboard_ipad.
  • Сделайте приложение универсальным, установив для свойства "Устройства" значение "Универсальное" на странице "Сводка" свойств "Цель" для вашего проекта. enter image description here
  • Откройте раскадровку для iPhone и выберите все и скопируйте
  • Откройте раскладку iPad и вставьте.

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

Ответ 17

Разный подход

  • Добавить пул-View-Controller с навигационным контроллером в iPad-раскадровке

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

  • Добавьте идентификатор раскадровки в iPhone-Storyboard "fooViewController_storyboard_identifier" для первого ViewController

  • Перейдите в раздел "fooViewController.m"

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

  • Перейдите к viewDidLoad -Method

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;
}

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

Ответ 18

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

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

Ответ 19

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

Ответ 20

Спасибо за ответы всем.

Я выполнил вышеуказанные шаги, но когда я запустил приложение под симулятором или моим iPad, он продолжал использовать только раскадровку iPhone.

По какой-то причине, когда я изменил целевое устройство на Universal, а не на iPhone, Xcode (v5.0) не обновил файл app-Info.plist, чтобы включить раскадровку iPad, поэтому мне пришлось вручную добавить следующая запись (с использованием редактора plist в Xcode):

Основное имя основного файла раскадровки (iPad) == > MainStoryboard_iPad

Ответ 21

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

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

и отлично работает!

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