Перетворення iPhone xib на iPad xib?


75

Як ви це робите? Я бачив на ньому один відеоурок, але екран був замалий. Крім того, крім зміни розміру подання, чи є якісь інші серйозні зміни, які мені довелося б внести до своїх програм iphone для конвертації в iPad?

Відповіді:


29

Припустимо, у вас SDK з Xcode 3 ,

  1. Відкрийте IB.
  2. Відкрийте XIB.
  3. Файл -> Створити версію iPad із використанням авторозмірних масок.

Яких відмінностей можна очікувати?
моровиця

7
Е ... за винятком того, що вже немає Інтерфейсного конструктора і немає еквівалентного варіанту в XCode 4, який я можу знайти.
Nicholas MT Elliott

Я все шукав рішення, яке є в Xcode 4, мені довелося перебудувати свій XIB як iPad з нуля, щоб вирішити його досі, що не може бути правильно.
Пітер Джонсон,

@Peter Johnson, @radven, @Nicholas MT Elliot, дайте відповідь нижче, яка насправді працює (хоча це не дуже добре) для XCode 4.
Dan Rosenstark

1
Одне, що може допомогти - якщо ви вимкнете змодельовані елементи інтерфейсу, ви зможете вільно змінювати розмір вашого перегляду.
Пітер Джонсон,

159

Я зміг звузити це до кількох речей, тому ось кроки, які працювали для мене:

1) Зробіть копію файлу iPhone xib та додайте його до свого проекту

2) Клацніть файл правою кнопкою миші (у xcode) та відкрийте як> Вихідний код

3) 2-й рядок повинен виглядати так:

<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">

Замінити:

<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">

4) Шукати "IBCocoaTouchFramework" і замінити всі випадки на "IBIPadFramework"

5) Збережіть файл і відкрийте як> Конструктор інтерфейсів - iOS

Файл все ще може виглядати як звичайний iPhone xib, але для мене, як тільки я змінив рядок стану на "Чорний" в інспекторі атрибутів, решта xib просто "схопилася" в iPad xib


1
Працювали. Мій рядок стану вже був чорним. Я встановив для нього значення none і повернув до чорного, після чого він перейшов до перегляду iPad
Томас

4
Приголомшливо Остаточна відповідь на Xcode 4. Той, хто має всі голоси за, вже застарів :)
Chris Newman

1
Я просто хочу додати, що ця відповідь працює в Xcode 4.2. Дякую
jsherk

4
Як і слід було очікувати, цей метод працює і навпаки для випадків, коли ви спочатку створили ресурс iPad і хочете повернутися до iPhone.
chrisbtoo

7
Зауважте, що в останньому XCode5 це трохи змінилося. Замість того, щоб шукати "IBCocoaTouchFramework" на кроці 4, шукайте "iOS.CocoaTouch" і просто додайте ".iPad" до кінця. Існує лише одна поява, і вона знаходиться в тому ж рядку, що і перша редагування. Також зауважте, що коли ви відкриваєте цю програму в IB, просто поміняйте її на книжкову чи альбомну (що ніколи не було) і назад, і розмір просто зміниться.
MajorHavoc

33

У Xcode 5 вам слід просто:

Знайти:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">

Замінити на:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510" systemVersion="12F37" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none">

Зверніть увагу, що ми просто додаємо .iPad до властивостей typeі targetRuntime.

Після відкриття просто виберіть новий Розмір для налаштування. Приклад: iPad на весь екран.


1
Маленька друкарська помилка: вам слід шукати <...type="com.apple.InterfaceBuilder3.CocoaTouch.XIB"...>.
Джуліан Д.

22

XCode4:

У xcode 4 ми не можемо зробити це для одного xib, але ми можемо створити відповідні версії ipad одночасно.

Перш ніж налаштовувати свій проект на ipad, коли він налаштований лише для iphone, клацніть правою кнопкою миші на цілі та натисніть на копію.

Тепер виберіть "дублікат і перехід на ipad". Створено нову ціль і новий набір xibs. Це має зменшити деяку роботу.

Сподіваюся, це допоможе.


це заощадило багато мого часу ... Це правильна відповідь на це питання :)
Гуру,

На жаль, це не працює в Xcode 5.1, він створює нову ціль для iPad, але не мігрує xib. Я навіть спробував створити новий проект і скопіювати раскадровку на Main.storyboard, потім продублювати ціль на iPad, і це все одно не генерує xib. З якихось причин Interface Builder із Xcode 3 більше не відкривається в 10.9, тому я змушений редагувати текст xib безпосередньо.
Zack Morris

PS, ця відповідь найкраще спрацювала для мене в Xcode 5 (можливо, також 4), оскільки вона автоматично змінила розмір макета здебільшого: stackoverflow.com/a/8694985/539149
Зак Морріс

14

Xcode 4 :

Функцію Створення версії iPad за допомогою масок масштабування було вилучено з Xcode 4. Зараз найпростіший спосіб - використовувати Xcode 3 для перетворення, оскільки формат файлу nib (.xib) не змінився.

Тепер Xcode 3 і 4 можна встановити в одній системі, просто вибравши іншу папку (див. Інструкції з установки на зображенні диска).

В іншому випадку вам потрібно буде скопіювати / вставити елементи інтерфейсу користувача з версії iPhone і повторно зв’язати їх зі своїм кодом.


2
Я хотів би, щоб мені дозволили висловлюватися про цю одну бета-версію разом з цією бета-IDE :(
JustSid

Xcode 4 має спосіб зробити це. Дивіться відповідь Теджеша на цій самій сторінці.
Marc M

6

А як щодо того, щоб дозволити комп’ютеру виконувати роботу комп’ютера?
Швидше, менше ризику помилок.

Ось робочий процес, заснований на чудовій відповіді від Jag , але автоматизований за допомогою sed.

По-перше, давайте налаштуємо деякі речі. Нам потрібно буде зробити це лише один раз.
У каталозі, що містить ваші XIB, створіть два файли із таким вмістом:

Файл iPhoneToiPadXIBConversion.sed:

s/com.apple.InterfaceBuilder3.CocoaTouch.XIB/com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/g
s/IBCocoaTouchFramework/IBIPadFramework/g

і файл iPadToiPhoneXIBConversion.sed:

s/com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/com.apple.InterfaceBuilder3.CocoaTouch.XIB/g
s/IBIPadFramework/IBCocoaTouchFramework/g


Налаштування завершено. Щоб перетворити XIB, введіть одну з двох наступних команд у терміналі:

Перетворення iPhone на iPad:

sed -f iPhoneToiPadXIBConversion.sed  MyViewController~iphone.xib  > MyViewController.xib

Перетворення iPad у iPhone:

sed -f iPadToiPhoneXIBConversion.sed  MyViewController.xib  > MyViewController~iphone.xib





Для розваги створимо дві функції в zsh, щоб зробити перетворення ще простішим:

function convertiPadXIBToiPhone () {
    newXibName=`echo "$1" | /usr/bin/sed "s/.xib/~iphone.xib/"`
    `/usr/bin/sed -f iPadToiPhoneXIBConversion.sed "$1" > "$newXibName"`
    echo "Did convert $1 to $newXibName."
}

function convertiPhoneXIBToiPad () {
    newXibName=`echo "$1" | /usr/bin/sed "s/~iphone.xib/.xib/"`
    `/usr/bin/sed -f iPhoneToiPadXIBConversion.sed "$1" > "$newXibName"`
    echo "Did convert $1 to $newXibName."
}

Після додавання цього до конфігурації zsh перетворення XIB стає простим, як:

convertiPadXIBToiPhone MyViewController.xib

або

convertiPhoneXIBToiPad MyViewController.xib

Майже так само приємно, як коли XCode 3 це вбудовує. :-)
Уоррен П

:) Гей, я хотів би, щоб цей хак став марним завдяки новій функції наступної версії Xcode. Чекаючи його, я використовую його кожного разу, коли повинен перетворити XIB, і він чудово працює!
Гійом

5

Відкрийте XIB у XCode 4, використовуючи "переглянути як вихідний код".

Раніше

Створіть резервну копію перо.

Один

Підставте цього гоу

    <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
        <integer value="1056" key="NS.object.0"/>
    </object>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
        <integer value="3100" key="NS.object.0"/>
    </object>
    <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
    <int key="IBDocument.defaultPropertyAccessControl">3</int>
    <string key="IBCocoaTouchPluginVersion">301</string>

для цього іншого goo

    <string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
    <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
        <integer value="3100" key="NS.object.0"/>
    </object>
    <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
    <int key="IBDocument.defaultPropertyAccessControl">3</int>
    <string key="IBCocoaTouchPluginVersion">301</string>

Два

Потім для кожного подання перо за допомогою вбудованого IB видаліть його, а потім натисніть «Скасувати».

Три

Потім обмийте гарячою водою, щоб витерти те огидне почуття, яке може виникнути у вас.


Примітка: код взято безпосередньо з NIB, які 1) не працюють і 2) працюють.
Dan Rosenstark

4

Ви можете відкрити XIB як текстовий файл і змінити розмір UIView:

Клацніть правою кнопкою миші на своєму файлі XIB у de navigator і виберіть: "відкрити як ..." Відкрити як вихідний файл.

Знайдіть посилання на UIView та змініть значення кадру:

<object class="IBUIView" id="191373211">

<string key="NSFrame">{{0, 20}, {768, 1024}}</string>

Хм, я бачу NSFrameSize, але там не NSFrame ... Хтось може підтвердити?
Пітер Джонсон,

Те саме, що я змінив NSFrameSize, і це має ефект, але якщо я хочу редагувати інтерфейс в Xcode, я все одно бачу маленький екран.
DixieFlatline

3

У XCode 4.3.2 найпростіший спосіб створити версію xib для iPad - це продублювання цього файлу xib та додавання ~ipadсуфікса до імені файлу. І додайте до свого проекту як "myVC.xib", так і "myVC ~ ipad.xib". Зверніть увагу, що це "~ ipad" НЕ "~ iPad". Ваш додаток автоматично використовуватиме цю версію ~ ipad під час запуску на iPad. Це також працює з файлами ресурсів (наприклад, зображеннями).

Найкраще посилання, яке я міг знайти на даний момент ... https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/ImageSoundResources.html


Я чув, що (автоматичний вибір файлу з «~ iPad») має проблему зі старими iOS.
karim

Так, але це типова річ із новими функціями. Хоча не можу знайти хороший документ для цього. Але я впевнений, що це працює з iOS 5 і новішими версіями, що має бути досить добре.
Hlung

Дивно, що Apple все ще використовує [[UIDevice currentDevice] userInterfaceIdiom] у своєму універсальному шаблоні програми.
Тимур Кучкаров 01.03.13

3

Оновлення Xcode 5

targetRuntime = "iOS.CocoaTouch"

до

targetRuntime = "iOS.CocoaTouch.iPad"


2

Я задокументую те, що я зробив у Xcode 4.5:

  1. fixpattern.sh

    cp REPLACEME_Iphone.h REPLACEME_Ipad.h
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.h > REPLACEME_Ipad_tmp.h
    mv REPLACEME_Ipad_tmp.h REPLACEME_Ipad.h
    cp REPLACEME_Iphone.m REPLACEME_Ipad.m
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.m > REPLACEME_Ipad_tmp.m
    mv REPLACEME_Ipad_tmp.m REPLACEME_Ipad.m
    cp REPLACEME_Iphone.xib REPLACEME_Ipad.xib
    sed -e 's/com.apple.InterfaceBuilder3.CocoaTouch.XIB   /com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/IBCocoaTouchFramework/IBIPadFramework/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/320, 416/768, 1004/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    sed -e 's/REPLACEME_Iphone/REPLACEME_Ipad/g' REPLACEME_Ipad.xib > REPLACEME_Ipad_tmp.xib
    mv REPLACEME_Ipad_tmp.xib REPLACEME_Ipad.xib
    
  2. Створіть список файлів, які потрібно конвертувати fixfile, кожен рядок буде ім’ям файлу без розширення. Якщо ви вказали оригінальне ім'я файлу AAA_Iphone.h, просто поставте AAA. Якщо ваш оригінальний файл не має цього зразка, вам потрібно переглянути сценарій.

  3. Запустити в командному рядку

    cat fixfile | while read line ; do sed -e "s/REPLACEME/${line}/g" fixpattern.sh ; done > fixall.sh
    
  4. Перегляньте та запустіть fixall.sh

  5. Додайте нещодавно створений файл до проекту


2

Відповідь Джаг чудова. Але є фішка, якщо XIB відкривається / створюється в Xcode 5.

Для Xcode 5

1) Зробіть копію файлу iPhone xib та додайте його до свого проекту

2) Клацніть файл правою кнопкою миші (у xcode) та відкрийте як> Вихідний код

3) 2-й рядок повинен виглядати так:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="4510"

змінити його на

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="4510"

4) 8-й рядок повинен виглядати так:

<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>

змінити його на

<rect key="frame" x="0.0" y="64" width="768" height="960"/>

Ось і все, і ось у вас iPad XIB. Але все-таки справжня заслуга Яга.


1

На додаток до відповіді, наданої Jag, також знайдіть "320460" і замініть його на 768,1024, і ваш XIB буде змінено на розміри iPad.


1

Для Xcode 4,

Вам не потрібно створювати окремі цілі для кожного пристрою. Натомість ви можете змінити Пристрої в зведеному проекті на Універсальні, які вже були б у iPhone. На це відповідає посилання Оновлення iOS 5 App до Universal на Xcode 4.2. Таким чином, це зробить перехід для вас.


0

Здається, найкраще рішення - це завжди спочатку розробляти як iphone, а потім, завершивши, додайте ціль ipad, дозволивши xcode зробити оновлення. Я зробив ту ж помилку, вибравши універсальний для запуску, який створює кілька перших файлів, але потім кожен інший xib повинен був бути відтворений вручну в папці ipad. Великий БІЛЬ


0
Jag has given Great Answer.

У деяких випадках.

Не потрібно конвертувати ваш Iphone XIB в Ipad XIB. Ви можете скористатися авторозмірною маскою та отримати запущений Ipad. просто потрібно налаштувати додаток для роботи в універсальному режимі з відповідною маскою автоматичного розміру.


0

Просто замініть

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch"

з

<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch.iPad"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.