2015-11-23 5 views
0

Я пытаюсь оптимизировать, как приложение ищет различные размеры экрана и что бы я ни делал, в .xib Я не могу предотвратить некоторые изменения компоновки, когда я переключаюсь с 6splus-> 6s-> 5 симуляторов iPhone. Я пытаюсь исправить пространство от моих ярлыков до изображения (которое служит фоном), а затем масштабировать шрифты в зависимости от устройства. Хотя я устанавливаю ограничения, они каким-то образом перепутаны и не применяются с одного экрана до другого.iOS, расположение макета в зависимости от размера экрана вопроса

6splus выглядит следующим образом:

enter image description here

Здесь вы можете увидеть, что позиционирование совершенно неправильно с правой стороны, даже если правый разнос настроен в .xib

Затем собирается 6s:

enter image description here

Looks Relat (так как я оптимизировал его для 6 с изначально)

Обратите внимание, как он сдвигается справа налево. Я определенно хочу предотвратить это.

Тогда, iPhone 5:

enter image description here

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

Вот скриншот моей .xib с ограничениями:

enter image description here

.xib является настраиваемым UITableViewCell, что я использую в UITableView.

Следующие изображения показывают ограничения по метке:

enter image description here

enter image description here

enter image description here

enter image description here

UIImageView (фон) ограничения:

enter image description here

Любые предложения были бы весьма полезными.

+0

Какой элемент ограничен ведущим или задним фронтом/маркой? «День дня» ограничивается только местом расположения и ярлыками дневного дня. Является ли один из них ограниченным ведущим/конечным? – Paulw11

+0

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

+0

Я также меняю шрифты динамически, но это не имеет значения, потому что одни и те же вещи случаются, даже если я устанавливаю их для всех размеров экрана. –

ответ

0

Итак, что я в конечном итоге делает это создание 4 точек на 4 различных ограничений:

1. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *eventNameBottomMargin; 
2. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *eventNameLeftMargin; 
3. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomMarginConstraint; 
4. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *rightMarginConstraint; 

сдерживающих 1,2 предназначены для UILabel в нижнем левом углу; ограничения 3, 4 приведены для UILabels справа: с помощью совета Tj3n я помещаю их в UIView, поэтому 3,4 являются ограничениями UIView относительно фона UIImageView.

Тогда я изменил значение ограничений в коде в зависимости от ширины устройства:

- (void)awakeFromNib 
{ 
[super awakeFromNib]; 
CGRect screenRect = [[UIScreen mainScreen] bounds]; 
NSNumber *screenWidth = @(screenRect.size.width); 
[self setFontsOnDeviceWithScreenWidth:screenWidth]; 

int rightMargin = 15; 
int bottomMargin = -105; 
int nameLeftMargin = 55; 
int nameBottomMargin = -33; 

if (screenWidth.intValue == 320) { 
    // iPhone 5 screenWidth = "320" 
    rightMargin = 5; 
    bottomMargin = -105; 
    nameLeftMargin = 50; 
    nameBottomMargin = -36; 
} else if(screenWidth.intValue == 375) { 
    // iPhone 6s 
    rightMargin = 15; 
    bottomMargin = -105; 
    nameLeftMargin = 80; 
    nameBottomMargin = -30; 
} else if(screenWidth.intValue == 414) { 
    // iPhone 6s Plus 
    rightMargin = 35; 
    bottomMargin = -108; 
    nameLeftMargin = 100; 
    nameBottomMargin = -30; 
} 
self.rightMarginConstraint.constant = rightMargin; 
self.bottomMarginConstraint.constant = bottomMargin; 
self.eventNameLeftMargin.constant = nameLeftMargin; 
self.eventNameBottomMargin.constant = nameBottomMargin; 
} 

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

Смежные вопросы