UISegmentedControl - изменение высоты в Interface Builder

Я создаю ряд статических пользовательских UITableViewCells и перетаскиваю UISegmentedControl в одну из пользовательских ячеек.

Хотя сегментированный элемент управления позволяет мне изменять его ширину, я не могу изменить его высоту в Interface Builder (это свойство выделено серым цветом на 44 в разделе «размер» инспектора свойств).

Я знаю, что UISegmentedControl можно создать в коде с произвольной высотой и добавить в UITableViewCell. Есть ли способ настроить высоту сегментированного элемента управления в Interface Builder?


person Urizen    schedule 26.01.2010    source источник


Ответы (7)


Нет, это должно быть сделано в коде. См. этот вопрос.

person David Kanarek    schedule 26.01.2010

Вы также можете открыть файл xib в любом текстовом редакторе, таком как Dashcode, MacVim или TextEdit — это XML. Затем найдите там свой элемент, в моем случае это выглядело так:

<object class="IBUISegmentedControl" id="270020637">
    [...]
    <string key="NSFrame">{{20, 154}, {176, 44}}</string>
    [...]
</object>

Затем вы можете изменить 44 на любую желаемую высоту - вы увидите изменения в IB.

Это работает для всех элементов, высота которых не может быть изменена в IB - UIPicker также...

person kender    schedule 31.12.2010
comment
Очень хорошо. Теперь обвините Apple в том, что мы не позволили нам изменить его в IB в первую очередь. - person Matej; 09.08.2012
comment
Потрясающий ответ! Apple терпит неудачу! - person Renato Lochetti; 02.09.2013
comment
#highqualityanswer Это было единственное решение, которое сработало для меня в Xcode 5.1. Спасибо! - person GangstaGraham; 11.04.2014
comment
вы также можете щелкнуть правой кнопкой мыши на .xib в списке вашего проекта и выбрать «Открыть как», а затем выбрать исходный код. - person Bot; 23.09.2014

Вы можете косвенно изменить его, когда закрепите «Высоту» в Интерфейсном Разработчике (выберите элемент управления сегментом, затем в меню выберите Editor -> Pin-> Height).

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

ограничение высоты построителя интерфейса

person fschaper    schedule 20.12.2012
comment
Большая помощь. Спасибо. Да, только iOS6, но по состоянию на февраль 2013 года это было 83% устройств iOS. tuaw.com/2013/02/13/ - person B-Money; 22.05.2013
comment
Когда он встроен в панель навигации, кажется, что мы не можем его изменить. - person ZYiOS; 21.03.2014

Я не уверен в IB, но вы всегда можете найти ячейку в своем коде и программно настроить ее высоту UISegmentedControl.

person Neal L    schedule 26.01.2010

Чтобы сделать это внутри Interface Builder, вы можете выбрать элемент управления и добавить атрибут фрейма в разделе «Определяемые пользователем атрибуты времени выполнения».

добавить атрибут фрейма в построителе интерфейса

person Shaz    schedule 30.08.2014

Я хочу добавить к ответу Кендера.

Если вы используете раскадровку, а не XIB, вам нужно будет добавить:

                                <constraint firstAttribute="height" constant="10" id="9Wo-6S-8EM"/>
                                <constraint firstAttribute="width" constant="201" id="lw7-cq-3XN"/>

Идентификатор может быть чем угодно уникальным, я думаю. Может быть, выбрать какой-нибудь идентификатор и изменить одну букву?

Это полный код

<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="RMR-XS-abw" userLabel="ngentot2">
                        <constraints>
                            <constraint firstAttribute="height" constant="10" id="9Wo-6S-8EM"/>
                            <constraint firstAttribute="width" constant="201" id="lw7-cq-3XN"/>
                        </constraints>
                        <segments>
                            <segment title="First"/>
                            <segment title="Second"/>
                        </segments>
                    </segmentedControl>

Я добавляю userLabel, чтобы легко находить нужные вещи.

Примечание: чтение раскадровки очень полезно. Изменение файла раскадровки ОЧЕНЬ опасно.

person user4951    schedule 12.10.2012

Мы можем установить автомакет, а затем установить высоту. После этого мы можем отключить автомакет. так что это поможет для других, чем ios 6.0.

person shreeji    schedule 27.07.2013