Перетворення розгортки з iPhone в iPad


218

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

Щоб бути конкретним:

Чи є подібна функція чи є лише ручний спосіб?


5
о, дякую, я не знав, що мені потрібно було їх позначити, я позначив одну відповідь зараз як правильну. Я також це робив у своїх старих темах, дякую.
dehlen

1
Детальна інформація з кроками та зображеннями, знайденими тут на datacalculation.blogspot.in/2014/09/…
iOS Test

Відповіді:


535

Я знайшов своє рішення:

  1. Скопіюйте свій iPhone-Розгортка та перейменуйте його MainStoryboard_iPad.storyboard

  2. Закрийте Xcode та відкрийте цей файл у будь-якому текстовому редакторі.

  3. Шукайте targetRuntime="iOS.CocoaTouch"та змініть його наtargetRuntime="iOS.CocoaTouch.iPad"

  4. Змініть код на MainStoryboard_iPad.storyboard з:

    <simulatedScreenMetrics key="destination" type="retina4"/> до

    <simulatedScreenMetrics key="destination"/>

  5. Тепер збережіть усе і знову відкрийте Xcode. В iPad-Storyboard є той самий вміст, що і у файлі iPhone, але все може бути невпорядкованим.

Це врятувало мене години - сподіваюся, це допоможе тобі


20
+1 Якби я міг, я дав би вам +100 від власної репутації. Блискуча порада! Єдине, що я не міг зробити, - це відкрити рекламну дошку за допомогою Dashcode, тому я використав TextWrangler (але, думаю, будь-який текстовий редактор зробив би). Дякую!
Пьотр Юстина

45
Гарна порада, дякую. Поки ви перебуваєте на цьому, ви, можливо, також захочете змінити всю ширину = "320" на ширину = "768", висоту = "480" на висоту = "1024" тощо тощо прямо звідси. Це набагато простіше, ніж робити це елемент за елементами в ІБ.
Бен Г

63
не використовуйте Dashcode, ні textWrangler, всередині xCode просто: клацніть правою кнопкою миші на дошці повідомлень -> "відкрити як" -> "Вихідний код", коли це зроблено, зробіть те ж саме, за винятком "Builder інтерфейсу - IOS StoryBoard"
hokkuk

16
@PiotrJustyna ви можете це зробити. Натисніть start a bountyпід запитанням, виберіть бажану суму і Reward existing answer...
Filip Radelic

33
щоб отримати формат iPad, також змініть код на MainStoryboard_iPad.storyboard з: <simulatedScreenMetrics key="destination" type="retina4"/>на<simulatedScreenMetrics key="destination"/>
Маркус Шваб

61

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


9
Найкраща відповідь, просте рішення та дозволяє легко змінювати інтерфейс після цього, на відміну від верхньої відповіді. :)
Метт Рейд

як щодо макета?
tryKuldeepTanwar

10

Це не дуже спрацювало для мене. Я зробив щось трохи інше.

  1. Створіть новий файл дошки для версії iPad
  2. Відкрийте і новий файл, і файл, який я хочу скопіювати в textwrangler (текстовий редактор)
  3. Скопіював XML-текст із старого файлу в новий файл між цими тегами xml
  4. Перший тег <scenes> <!--Contents View Controller-->
  5. Вставити сюди
  6. Кінцеві теги </class> </classes>

Це працювало для мене. У мене з’явився новий макет із підключеними всіма розетками, що поодинці врятувало мене кілька годин.


1
+1 інші не працювали для мене, і це робить все так, як очікувалося
Shereef Marzouk

4
Це можна зробити з Xcode. Просто натисніть правою кнопкою миші / керуйте .storyboardфайлами та натисніть, Open As > Source Codeщоб переглянути необроблений XML.
Метт Кантор

8

Читаючи багато тем на 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 «відкрити як» -> «IOS StoryBoard» 5. Можливо, вам також доведеться змінити свої обмеження. Це все, що ти зробив.


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

8

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


1
Це найкращий спосіб зробити це. оскільки всі перегляди та компоненти будуть змінені до формату ipad.
Бен

1
В останній версії ios7 не потрібно змінювати type = "com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB".
super9

5

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

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


4

Ось щось, що заощадило мені години і може допомогти вам із навичками Python.

Останні два місяці я будував додаток, зосереджений на тому, щоб iPad ітераціював UX з командою.

Сьогодні зосередився на розробці версії iPhone, дотримуючись наведених вище кроків (спасибі!), Але мені не хотілося потім змінювати розмір усіх елементів інтерфейсу з розмірами iPad у візуальному редакторі.

Тому я написав цей маленький сценарій джигу python, щоб просканувати файл розкадровки на х, у, ширину, висоту та масштабувати все за співвідношенням 320./768. Тоді я дозволив мені зосередитися на тонких корекціях.

  1. Скопіюйте розкладку iPad у новий файл. (наприклад, iPhoneStoryboard.storyboard)

  2. Запустіть скрипт внизу, скопіювавши ім'я файлу розкадрування в якості першого параметра.

  3. Згенерує вихідний файл із суфіксом _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()

1
Привіт Кріш, я новачок у фітоні. тож я не в змозі зрозуміти код для зміни iphone раскадровки на iPad. тож чи можете ви мені допомогти в цьому? Моя ipad раскадровка перетворюється на iphone раскадровку без жодних проблем. але мені потрібно перетворити розкладку iphone на iPad. Тож, де потрібні зміни, необхідні у вищевказаному скрипті, або ви можете поділитися сценарієм, який перетворює iphone у ipad. Заздалегідь спасибі.
Шубхам

@Chris Robertson Chris, якби я хотів використати цей сценарій для перетворення iPhone на iPad, я змінив би "шкала = 320./768". до 'масштабу = 768./320.'?
Чарльз Робертсон

3

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


3

Як тільки швидка примітка для тих, у кого, можливо, виникли мої проблеми з цим:

Мій випуск:

Вміст розкадровки добре скопійовано до нового файлу дошки, який я додав. Однак це не змінило б мій передбачений iPad. Помітивши, що мені довелося переключитися на призначений графік для цілі збірки (див. Зображення), щоб зміни відображалися.

Я опублікував би зображення, якби у мене були точки, але налаштування знаходиться в:

Навігатор проектів у лівому меню джерела, коренева мета загальної вкладки проекту (центральна панель), інформація про розгортання (друга підзаголовка) та вибрана вкладка кнопки iPad.

Звідти виберіть свою розкадровку під "основним інтерфейсом".

Дякую за пост, я сподіваюся, що ця згадка допомагає кудись заграти.


3

Для розваги, на XCode 5.1 та iOS 7.1 мені також потрібно було змінити значення "toolVersion" та "systemVersion" на це:

toolsVersion="5023" systemVersion="13A603"

Без цього новий файл раскадровки не збирався б


3

За допомогою класів розмірів 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

Для Xcode10

  1. Просто дублікат Main.storyboard

  2. Потім перейменуйте файли в Main_iPad.storyboardіMain_iPone.storyboard

  3. Встановіть відповідні імена в .plist

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

4.Виберіть правильну .сторінку для налаштування введіть тут опис зображення


2

Ця функціональність тепер вбудована. Наприклад, якщо змінити налаштування проекту в Інфо про розгортання -> Пристрої з iPhone на Універсальний, з'явиться наступне діалогове вікно:

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


3
Це може бути помилка в Xcode, але я ніколи не працював над цим. Отриманий планшет iPad не додається до проекту, і не здається, що він створений.
s73v3r

2

Я прослідкував за цією темою, коли мене вчора потрапило в цю ж проблему. Кроки, які я виконував

  1. Для Xcode 5.1 мені довелося провести чистку розгортки iPhone, як-от відсутнє повторне використанняІдентифікаторів комірок таблиці, надати ідентифікатор дошки історії для кожного контролера, видалити невикористані сцени.
  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 за замовчуванням Ціль розгортання до 7,1, піклуючись про застарілі функції.
  8. Щоб виправити помилковий помилку перегляду в iPad Storyboard - Змінено макет кадру для контролерів, що дають помилки.

Це було .. Дякую всім за допомогу ..


1

Найпростіший і найнадійніший спосіб зробити це - скопіювати пасту з вашої розкладки iPad.

  1. Створіть нову рекламну дошку та назвіть її на кшталт MainStoryboard_ipad.
  2. Зробіть свою програму універсальним додатком, встановивши властивість Devices на Universal на сторінці підсумків Цільових властивостей для вашого проекту. введіть тут опис зображення
  3. Відкрийте свій планшет iPhone і виберіть все та скопіюйте
  4. Відкрийте свій планшет iPad та вставте.

Вам доведеться піти на зміну розміру, але це може бути швидше, ніж відтворити всю таблицю розповідей.


1

Існує дійсно просте рішення для версій Xcode, які підтримують класи розмірів (випробувано в Xcode 7, яка є поточною версією на момент написання). Перевірте в «використовувати класи розміру» прапорець на файл розкадровки ( File Inspector ), переконайтеся , що діалогове вікно , яке з'являється. Потім зніміть цей прапорець - Xcode запитає, чи хочете ви використовувати цю таблицю розкадрів для iPhone або iPad та перетворить екрани в неї належним чином. Не потрібно безпосередньо редагувати файл раскадровки . Як для iPad, так і для iPhone просто скопіюйте одну і ту ж саму розкадровку та налаштуйте одну для iPad та одну для iPhone за допомогою описаного способу.

І перш ніж хтось запропонує використовувати класи розмірів - хоча вони чудові, вони менш зручні для широко налаштованого інтерфейсу користувача, наприклад, ігор тощо


1

Інший підхід

  1. Додайте порожній-View-Controller з Navigation-Controller в iPad-Storyboard

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

(ps. Знаю, проблема полягає в тому, що фони перегляду будуть встановлені на білий)



0

Дякую за відповіді всім.

Я дотримувався вищезазначених кроків, але коли я запускав додаток під тренажером або на своєму iPad, він продовжував використовувати лише розкадровку iPhone.

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

Основна назва файлу розкадрівки (iPad) ==> MainStoryboard_iPad


0

Я просто змінюю (додатково до відповіді від @tharkay):

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

і чудово працює!

Я використовую це в XCode 8.3.3

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.