UISegmentedControl - изменение высоты в Интерфейсном Разработчике - PullRequest
20 голосов
/ 26 января 2010

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

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

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

Ответы [ 7 ]

39 голосов
/ 01 января 2011

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

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

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

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

35 голосов
/ 20 декабря 2012

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

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

interface builder height constraint

10 голосов
/ 26 января 2010

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

2 голосов
/ 31 августа 2014

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

add frame attribute inside interface builder

2 голосов
/ 26 января 2010

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

1 голос
/ 27 июля 2013

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

1 голос
/ 12 октября 2012

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

Если вы используете раскадровку вместо 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>

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

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

...