20

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

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

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

ответ

2

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

39

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

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

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

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

+5

Очень приятно.Теперь обвиняйте яблоко в том, что он не позволяет нам изменить его в IB, в первую очередь –

+0

Удивительный ответ! Apple не работает! –

+0

#highqualityanswer Это было единственное решение, которое работало для меня на Xcode 5.1 Спасибо! – GangstaGraham

1

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

Если вы используете раскадровки, а не 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, чтобы я мог легко найти материал.

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

35

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

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

interface builder height constraint

+1

nice :) BUt работает только для iOS 6 – code4j

+4

Отличная помощь. Благодарю. Да только iOS6, но по состоянию на февраль 2013 года это было 83% устройств iOS. http://www.tuaw.com/2013/02/13/chitika-all-versions-of-ios-6-now-account-for-83-1-of-ios-traf/ –

+0

Когда он встроен в навигацию бар, кажется, мы не можем измениться. – ZYiOS

1

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

2

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

add frame attribute inside interface builder

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