Как сделать uitableview в конструкторе интерфейсов совместимым с 4-дюймовым iPhone

Как сделать uitableview в конструкторе интерфейсов совместимым с 4-дюймовым iphone5 и более старыми iPhone 4/4s?

В Xcode 4.5 есть три варианта:

  • Свободная форма
  • Полноэкранный режим Retina 3.5
  • Ретина 4 на весь экран

Если я выбрал Retina 4, то в 3,5-дюймовом телефоне он выходит за границы экрана

Используя код, я могу установить рамку соответствующим образом, но тогда какой смысл использовать конструктор интерфейсов?

Как это сделать с помощью Interface Builder?

ИЗМЕНИТЬ

Мой вопрос касается экрана iPhone 5 Retina 4 дюйма. При проверке размера представления, которое имеет строку состояния и панель навигации, вот значение self.view.frame.size.height/width, кадр 320,000000 x 416,000000, если я выберу freeform/none/retina 3.5

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

ИЗМЕНИТЬ Для тестирования в симуляторе iOS6, если я установлю следующее в коде

self.tableView.frame    = CGRectMake(0, 0, 320, 546);
self.tableView.bounds   = CGRectMake(0, 0, 320, 546);
self.view.frame         = CGRectMake(0, 0, 320, 546);
self.view.bounds        = CGRectMake(0, 0, 320, 546);
NSLog(@"%2f - %2f", self.view.bounds.size.width, self.view.bounds.size.height);
NSLog(@"%2f - %2f", self.tableView.bounds.size.width, self.tableView.bounds.size.height);

Я получаю следующий вывод

 320.000000 - 546.000000
 320.000000 - 546.000000

И все строки ниже 480 пикселей сверху недоступны для выбора, так как «представление» по-прежнему считает, что они выходят за пределы.

МОЕ РЕШЕНИЕ

Установите размер Retina 4 для всех экранов, даже для файла xib главного окна. Кажется, после этого он работает нормально даже на iphone 4. И все строки ниже 480 пикселей теперь кликабельны в симуляторе iOS 6.


person Anand    schedule 13.09.2012    source источник
comment
Вы смотрели параметры автоматического изменения размера в IB?   -  person ott--    schedule 13.09.2012
comment
Добавьте заставку [email protected] все будет хорошо. У IB есть возможность имитировать 4 дюйма - в правом нижнем углу рядом с кнопками масштабирования....   -  person k06a    schedule 13.09.2012
comment
У меня была такая же проблема, что нижняя строка не была кликабельной. В итоге я установил размер Retina 4 для всех экранов.   -  person RocketMan    schedule 17.09.2012


Ответы (5)


ОСТЕРЕГАЙТЕСЬ устанавливать для атрибута размера значение «Полный экран Retina 4», если вы представляете листы действий в своем приложении. Это решение фактически устанавливает размеры основного окна в соответствии с размерами iPhone 5. В моем случае установка этого затронутого дисплея в iPhone 4 при попытке показать лист действий, потому что он попытается показать его снизу просматриваемого экрана. .

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window.frame = CGRectMake(0, 0, [[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height);

}
person M. Alvanez    schedule 25.09.2012
comment
Спасибо, использования [window setFrame:[[UIScreen mainScreen] bounds]] достаточно, и это короче. ;-) - person Tomáš Linhart; 26.10.2012
comment
Я использую это и все еще получаю черные полосы выше и ниже моего приложения. Есть идеи, что я делаю неправильно? Спасибо! - person daveomcd; 01.12.2012
comment
ИСПРАВЛЕНО: Просмотрел мои предупреждения... У меня было одно сообщение о том, что мне не хватает изображения на дисплее Retina 4. Я щелкнул по нему, затем щелкнул «Добавить», и он добавил изображение по умолчанию, которое решило мою проблему. Надеюсь, это поможет кому-то другому. - person daveomcd; 01.12.2012

Выберите файл xib и измените атрибут Size.

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

person fannheyward    schedule 14.09.2012
comment
да, я знаю, это не помогает, так как это не работает на другом размере экрана. - person Anand; 17.09.2012
comment
Это определенно работает, чтобы исправить неотзывчивую панель вкладок на 4-дюймовых дисплеях — установите для нее полноэкранный режим Retina 4, и тогда все размеры будут работать (как 4-дюймовые, так и 3,5-дюймовые). Не уверен, в чем ошибка, но, вероятно, это что-то в том, как xCode сохраняет файлы Nib. - person Kenny Grant; 18.09.2012

Из того, что я понял, вы хотите создать представление таблицы, которое может быть применимо как к iPhone 4, так и к 5. Прежде всего, я не пробовал Xcode 4.5, но код

 CGRect fullScreenRect = [[UIScreen mainScreen] bounds];
 theTableView.frame = CGRectmake = (0,0,fullScreenRect.width,fullScreenRect.height);

fullScreenRect вернет границу текущего устройства, будь то 3,5 или 5 дюймов. и вы можете динамически устанавливать высоту и ширину.

Дайте мне знать, если это сработало ..

Ваше здоровье

W

person WaaleedKhan    schedule 13.09.2012
comment
Я знаю, как это сделать в коде. Я смотрел, как это сделать в конструкторе интерфейсов. - person Anand; 13.09.2012
comment
проверьте мои правки, даже после установки в коде части ниже 480 пикселей не могут быть выбраны/кликабельны - person Anand; 14.09.2012
comment
+1, мне нужно программно изменить размер, правильный код: CGRect fullScreenRect = [[UIScreen mainScreen] bounds]; self.view.frame = CGRectMake (0,0,fullScreenRect.size.width,fullScreenRect.size.height); - person ; 16.01.2013

Такие настройки, как выбор «произвольной формы», «Retina 3.5» или «Retina 4» в Interface Builder, находятся в разделе «Смоделированные показатели» правой панели (обратите внимание на выделение).

Это означает, что они используются только для того, чтобы показать вам, как будет выглядеть вид при отображении в этих размерах. Обычно вы используете это, чтобы узнать во время разработки, какое пространство у вас будет для макета ваших представлений. Но размер UIView UIViewController всегда изменяется при отображении на экране в конце.

Например, если вы знаете, что у вас будет строка состояния и панель навигации вверху, а панель вкладок внизу, у вас будет меньше места для организации оставшегося представления на экране, поэтому выберите их в разделе «Смоделированные показатели». панели поможет вам увидеть, какое пространство у вас есть в представлении, и избежать размещения элементов, скажем, y = 460, которые уйдут за пределы экрана во время выполнения из-за этих NavBar и TabBar.

Но в конце UIViewController изменит размер своего представления так, чтобы оно занимало максимально доступное пространство, перемещая подпредставления в соответствии со свойствами AutoresizingMask (распорки и пружины, которые вы можете настроить на панели «Инспектор размеров» в IB).

В заключение, единственное, что вам нужно сделать, это:

  • Предпочитаю выбирать смоделированную метрику «Retina 3.5» для вашего представления, чтобы увидеть в Interface Builder наименьший размер, который может быть у вас при отображении этого представления (помогает вам избежать размещения представлений и элементов управления в той части экрана, которая будет видна только в 4 "экраны, но не на 3,5-дюймовых экранах и планировать свой вид с учетом наименьшей общей зоны)
  • Правильно настройте маски автоизменения размера (или используйте автомакет и ограничения, если вы планируете выпустить свое приложение только для iOS6, а не для iOS4 или iOS5), чтобы ваши представления были правильно перестроены, когда экран выше (Retina 4").
person AliSoftware    schedule 13.09.2012
comment
Неправда, вот значение self.view.frame.size.height/width, кадр 320.000000 x 416.000000 на случай, если я выберу freeform/none/retina 3.5 - person Anand; 13.09.2012
comment
Да и? Это размер представления, представленного ViewController, который имеет строку состояния (20pt) и NavigationBar (44pt) на экране 3,5 (480pt в высоту), поэтому мне кажется законным. - person AliSoftware; 13.09.2012
comment
мой вопрос для iphone 5 retina 4 дюйма!! высота не 480px!! - person Anand; 14.09.2012
comment
тестирую на симуляторе iOS 6. - person Anand; 14.09.2012
comment
О, вы имеете в виду, что даже когда вы тестируете на симуляторе iPhone 5 (4), он дает вам 480 точек, а не 568 точек? Извините, сам еще не пробовал, но если это так, то это очень странно (и не очень логично)… Ваше приложение занимает всю высоту экрана в симуляторе iPhone 5, или у вас есть черные полосы на сверху и снизу? Каково значение [UIScreen mainScreen].bounds? - person AliSoftware; 14.09.2012
comment
да, я пытаюсь в новом симуляторе iOS6, думал, что в вопросах, совместимых с 4-дюймовым iphone5, все ясно. - person Anand; 17.09.2012

если ваш интерфейс использует Storyboard:

Откройте *.Storyboard с помощью «Текстового редактора».

и иди в конец внизу найди <simulatedScreenMetrics key="destination" type="retina4"/>

удалить type="retina4"

тогда это будет размер по умолчанию в 3,5 "

person Frank Wu    schedule 17.10.2012