20

Ich erstelle eine Reihe von statischen benutzerdefinierten UITableViewCells und habe eine UISegmentedControl auf eine der benutzerdefinierten Zellen gezogen.UISegmentedControl - Ändern der Höhe in Interface Builder

Während das segmentierte Steuerelement mir erlaubt, seine Breite zu ändern, kann ich seine Höhe in Interface Builder nicht ändern (diese Eigenschaft ist auf 44 im Abschnitt 'Größe' des Eigenschafteninspektors ausgegraut).

Ich weiß, dass eine UISegmentedControl mit einer benutzerdefinierten Höhe in Code erstellt werden kann und zu einer UITableViewCell hinzugefügt werden kann. Gibt es eine Möglichkeit, die Höhe des segmentierten Steuerelements in Interface Builder anzupassen?

Antwort

2

Ich bin nicht sicher in IB, aber Sie könnten immer die Zelle in Ihrem Code finden und programmgesteuert die Höhe des UISegmentedControl anpassen.

39

Sie können auch die xib Datei in einem beliebigen Texteditor, wie Dashcode oder MacVim oder TextEdit öffnen - es ist ein XML. Dann gibt Ihr Element finden, in meinem Fall sah es so aus:

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

Dann können Sie die 44 in ändern, was auch immer gewünschten Höhe - werden Sie die Änderungen in IB sehen.

Diese für alle Elemente, die nicht funktioniert Höhe in IB geändert werden kann - UIPicker auch ...

+5

Sehr schön hinzuzufügen.Jetzt beschuldigen Sie Apple dafür, uns es in IB in erster Linie nicht ändern zu lassen –

+0

Super Antwort! Apple scheitert! –

+0

#highqualityanswer Dies war die einzige Lösung, die für mich auf Xcode 5.1 funktionierte. Danke! – GangstaGraham

1

Ich möchte Kender Antwort hinzuzufügen.

Wenn Sie Storyboard verwenden, anstatt XIB, müssen Sie hinzufügen:

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

Die id alles eindeutig sein kann, denke ich. Vielleicht eine ID auswählen und einen Buchstaben ändern?

Dies ist der vollständige Code

<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> 

Ich füge einen userlabel so dass ich einfach das Zeug finden.

Hinweis: Das Storyboard zu lesen ist sehr aufschlussreich. Das Ändern der Storyboard-Datei ist sehr gefährlich.

35

Sie können es indirekt ändern, wenn Sie die "Höhe" im Interface Builder festlegen (wählen Sie das Segmentsteuerelement und dann über das Menü wählen Sie Editor -> Pin-> Height).

Dadurch wird eine neue Beschränkung für die Höhe zur Liste der Einschränkungen für dieses Steuerelement hinzugefügt, die Sie anschließend bearbeiten können. Änderungen spiegeln sich direkt in InterfaceBuilder wider, wie Sie im Screenshot unten sehen können.

interface builder height constraint

+1

nice :) BUt es funktioniert nur für iOS 6 – code4j

+4

Große Hilfe. Vielen Dank. Ja, nur iOS6, aber seit Februar 2013 waren das 83% der iOS-Geräte. http://www.tuaw.com/2013/02/13/chitikaal-all-versions-of-ios-6-now-account-for-83-1-of-ios-traf/ –

+0

Wenn es in der Navigation eingebettet ist Bar, scheint uns nicht zu ändern. – ZYiOS

1

Wir können automatische Layout gesetzt und dann eingestellt Höhe, danach können wir aus automatischen Layout. So wird es für andere als ios 6.0 helfen.

2

es in Interface Builder Dazu können Sie das Steuerelement auswählen und Rahmenattribut unter "User Defined Runtime-Attribute"

add frame attribute inside interface builder

Verwandte Themen