iOS - высота кадра не по пикселям?

У меня только что был вопрос о высоте кадра.

кадр.размер.высота = 450;

Когда я устанавливаю кадр CGRect с высотой 450, когда x = 0 и y = 0. Табличное представление простирается почти до самого низа. Это число не основано на пикселях, так как я тестировал его на iPhone 5, 1136. Он не должен был расширяться даже наполовину.

Спасибо!


person Alan    schedule 09.10.2012    source источник


Ответы (3)


Координаты экрана iOS указаны в точках пользовательского интерфейса. Одна точка соответствует одному пикселю на экранах с исходной плотностью, а одна точка, таким образом, соответствует двум пикселям на дисплеях с высоким разрешением/ретина.

Обновление от 2014 года: один балл равен даже трем пикселям на iPhone 6 Plus. (2018: и iPhone 6s Plus, 7 Plus, 8 Plus и X.)

person Jesper    schedule 09.10.2012

Вы путаете точки и пиксели. Дополнительную информацию см. в документации Apple iOS.

В iOS существует различие между координатами, которые вы указываете в своем коде рисования, и пикселями базового устройства. При использовании собственных технологий рисования, таких как Quartz, UIKit и Core Animation, координатное пространство чертежа и координатное пространство вида являются логическими координатными пространствами с расстояниями, измеряемыми в точках. Эти логические системы координат отделены от пространства координат устройства, используемого системными фреймворками для управления пикселями на экране.

Система автоматически сопоставляет точки в координатном пространстве вида с пикселями в координатном пространстве устройства, но это сопоставление не всегда однозначное. Такое поведение приводит к важному факту, о котором всегда следует помнить:

Одна точка не обязательно соответствует одному физическому пикселю. Цель использования точек (и логической системы координат) — обеспечить постоянный размер вывода, не зависящий от устройства.

person Rikkles    schedule 09.10.2012

Как сказали Йеспер и Рикклес, iPhone 5 имеет дисплей Retina, а это означает, что вам нужно удвоить количество пикселей, которое вы установили, чтобы оно соответствовало количеству пикселей, отображаемых на экране.

Кроме того, не забывайте, что если ваше представление контейнера было разработано для исходного разрешения iPhone (320x480), его размер может быть изменен при использовании на iPhone 5, что сделает вашу исходную настройку «450» высотой 450/480 * 568 = 533 пикселя. .

person PatrickNLT    schedule 09.10.2012
comment
Это не поведение по умолчанию, оно полностью зависит от того, как вы устанавливаете маску автоматического изменения размера или используете ли вы свойства автоматического изменения размера. - person rckoenes; 09.10.2012
comment
Это поведение для корневого представления контроллера представления. Конечно, для других представлений вам придется поиграть со свойством autoresizingMask представления. - person PatrickNLT; 09.10.2012
comment
Вы также можете использовать это для представления rootviewcontroller. - person rckoenes; 09.10.2012