Изображения UIButton выглядят нормально в IB, но растягиваются при отображении в приложении

Я разрабатываю корпоративное приложение для отслеживания пробега и технического обслуживания служебных автомобилей. Я добавил графические кнопки, чтобы сделать его немного ярче. Кнопки выглядят так, как они должны выглядеть на XIB в IB, и на iPhone все остальные UIViews выглядят правильно, но на одном конкретном UIView графические изображения непропорционально растянуты по вертикали.

На первом изображении ниже показано, как это должно выглядеть, с тремя графическими кнопками внизу. На втором изображении показано, как это отображается на телефоне. Кнопка «Справка» на этой шапке экрана отображается нормально, но нельзя рассчитывать, что она останется такой.

Это также не соответствует. Вызов этого вида в любое время может показать растянутое изображение или вообще не показать изображение. Редко показывает изображение нормально, как кнопка Help выглядит ниже.

Телефон для разработки представляет собой 4S, работающий под управлением 6.1.3. Представления настроены для экрана Retina 3.5. XCode является последним (каким бы он ни был).

Как это должно выглядеть

Как это выглядит на телефоне

Опять же, проблема проявляется только в этом одном представлении. Существует еще один UIView на том же контроллере представления, который скрыт, когда отображается этот UIView. Графика кнопок в другом представлении выглядит нормально. Все остальные представления и контроллеры представлений без проблем используют ту же графику в UIButton.


person Bill Norman    schedule 14.05.2013    source источник
comment
Я не думаю, что вы используете автомакет для этого приложения?   -  person lxt    schedule 15.05.2013
comment
Вы используете автоматическую раскладку? Если это так, вы можете проверить ограничения для этих кнопок, чтобы убедиться, что они верны.   -  person rdelmar    schedule 15.05.2013
comment
Пожалуйста, опубликуйте код, используемый для кнопки, я думаю, вы используете ограничения.   -  person Bharathi D    schedule 15.05.2013
comment
Я узнал, где я могу отменить выбор автомакета, и он вернулся в нормальное состояние. Я не понимаю, как это получилось, тем более что это не было включено ни на одном из других контроллеров представления. Но я предполагаю, что я нажал на что-то, чего, по моему невежеству, не должно было быть.   -  person Bill Norman    schedule 15.05.2013
comment
Кто-нибудь может объяснить этому стареющему хиппи, почему он это сделал?   -  person Bill Norman    schedule 15.05.2013
comment
Автомакет включен по умолчанию при создании нового xib/раскадровки. Грустно, но верно.   -  person matt    schedule 15.05.2013
comment
Но я не помню, чтобы Autolayout выключался на других XIB, и они все выключены. Возможно ли, что функция Autolayout была добавлена ​​в XCode через некоторое время после того, как я создал более ранние XIB? Я работаю над этим проектом несколько месяцев. Я также не понимаю, почему активация Autolayout может привести к искажению определенных изображений только для определенного UIView. Изображения были в порядке на другом UIView на том же контроллере представления. Вздох! Так многому предстоит научиться!   -  person Bill Norman    schedule 15.05.2013


Ответы (3)


В Interface Builder (Xcode) вы создали представление, используя высоту экрана 4,5 дюйма.

Но устройство, на котором вы видите проблему, имеет 5-дюймовый экран. Таким образом, вид изменяется, чтобы соответствовать.

И когда это происходит, ограничения автоматического макета, которые Interface Builder накладывает на эти подпредставления, вступают в силу, чтобы определить, что они делают. Эти ограничения вызывают изменение высоты.

person matt    schedule 14.05.2013
comment
См. также stackoverflow.com/questions/16552118/ Эта проблема особенно застает вас врасплох в отношении последнего ряда вещей в окне, для которого Xcode автоматически генерирует очень своеобразный набор ограничения авторазметки. - person matt; 15.05.2013

Нет необходимости выключать Autolayout. Автомакет может быть очень полезным, но, похоже, ему нравится случайным образом назначать ограничение "Выровнять базовую линию по:" для UIButtons после их изменения положения.

Просто выберите нужный UIButton/UIImageView внутри Storyboard, найдите ограничение "Выровнять базовую линию по:", коснитесь значка шестеренки и выберите "Повысить до пользовательского ограничения", а затем нажмите еще раз и выберите "Удалить". Это должно решить вашу проблему.

person Dylan Moore    schedule 22.08.2013

В ответ на комментарии здесь я отвечу на свой вопрос: я отключил Autolayout для этого контроллера представления, и это все исправило. Это первое приложение, которое я написал с тех пор, как XCode начал разработку для iPhone 5, поэтому я не знал о функции Autolayout. Мне нужно понять, как он работает и почему он сделал то, что сделал.

Спасибо за вашу помощь!

person Bill Norman    schedule 14.05.2013