Die Größe von UIView in IB kann nicht geändert werden

87

Wahrscheinlich etwas Einfaches, aber ich kann nicht herausfinden, warum ich die Größe einer UIView in einer xib in Interface Builder nicht ändern kann.

Ich habe eine neue Ansicht XIB in xcode erstellt und im Größeninspektor sind Breite und Höhe deaktiviert und auf 320 mal 460 ausgegraut. Dies ist seltsam, da ich die Größe für die beiden anderen Ansichten ändern kann (die den beiden anderen Registerkarten zugeordnet sind) Artikel).

Ich bin nicht sicher, ob dies etwas damit zu tun hat, aber ich habe kürzlich das SDK auf 3 aktualisiert.

Vielen Dank!


quelle

Antworten:

81

Ich denke, dass Sie die Größe nicht bearbeiten können, während Sie Elemente der Benutzeroberfläche wie die Statusleiste in Interface Builder simulieren. Sie können versuchen, die simulierten Elemente auszuschalten, wenn diese aktiviert sind. Ich bin mir nicht ganz sicher, warum das so ist. Ich würde mich über Feedback von allen freuen, die wissen, warum genau das so ist - es muss einen guten Grund geben.

Teabot
quelle
1
Danke das stimmt. Nach dem Upgrade von xcode und IB war die Statusleiste standardmäßig aktiviert. Die anderen haben es aus.
1
Wie bei Xcode 4.2, iOS 5.0.1 hat sich dies geändert. Meine Antwort unten erklärt, wie dies erreicht werden kann.
lol
1
Sehr hilfreich. Schalten Sie einfach die Statusleiste aus, passen Sie die Größe an und schalten Sie die Statusleiste wieder ein.
Wollan
9
Diese Einstellung funktionierte für eine ViewController.xib in Xcode 4.3.3: "Simulierte Metriken - Größe: Freiform". Danach wird die Ansichtsgrößeneinstellung aktiviert. Entfernen Sie auch die Option "Ansichtsmodus" zum Füllen (direkt unter den simulierten Metriken).
defvol
uuuugh Ich mag diese IDE wirklich nicht
Saik Caskey
78

Um dies in XCode 4.6.3 / 5.0.2 zu erreichen, müssen Sie dem folgenden Screenshot folgen:

  1. Unter 'Dateiinspektor' -> Deaktivieren Use Auto Layout
  2. Klicken Sie auf Attributauswahl und wählen Sie Freeformfür Größe

Dies ist erforderlich, wenn Sie eine Header-Ansicht für eine Tabellenansicht erstellen

Geben Sie hier die Bildbeschreibung ein

Houman
quelle
40

Das gesuchte Teil befindet sich im ersten Inspektorfenster (Befehl-1). Ganz oben befindet sich ein Abschnitt mit der Bezeichnung Simulierte Benutzeroberflächenelemente. Standardmäßig ist die Statusleiste aktiviert. Sie müssen sicherstellen, dass alle drei auf Keine eingestellt sind.

Thomas Mon
quelle
2
Danke, diese Antworten haben mir eine Menge Zeit gespart! Weiß jemand, warum IB das tut?
Gregor
Danke Kumpel. Ich habe nach diesem gesucht.
Natanavra
Hinweis für alle, dies ist jetzt: "Nicht spezifiziert" statt keiner. (Ich habe Version 3.2.3)
IcyBlueRose
Ich bestätige für iPad ist "Nicht spezifiziert", danke Thomas Mon, Sie haben mir einige Stunden gespart: D
Qlimax
Ich sehe dies nur für View Controller, nicht für Views
BigBoy1337
26

Wie bei Xcode 4.2, iOS 5.0.1 umfassen die simulierten Standardmetriken die Simulation des Attributs 'size' von UIViewControllers auf 'Inferred'.

Wenn Sie dieses Attribut in "Freiform" ändern, können Sie die Größe des im UIViewController enthaltenen UIView ändern und gleichzeitig die Statusleiste (oder eine andere Simulation) simulieren.

lol
quelle
1
Das Größenattribut ist jetzt standardmäßig "Retina 4 Vollbild", aber das Ändern in "Freiform" funktioniert weiterhin.
Pier-Luc Gendreau
4

Gehen Sie einfach zum Inspektor, gehen Sie zum ersten Bereich (oder drücken Sie Befehlstaste 1) und ändern Sie die mit Statusleiste, oberer Leiste und unterer Leiste gekennzeichneten Felder im Abschnitt "Simulierte Elemente der Benutzeroberfläche" in "Keine". Möglicherweise müssen Sie auf das kleine Dreieck klicken, um sie sichtbar zu machen.


quelle
1

Komisch, ich habe ein ähnliches Problem. Ich habe alle Ansichten aus der xib-Datei entfernt und eine Ansicht erneut hinzugefügt. Setzen Sie die Statusleiste auf "nicht angegeben", damit die Statusleiste nicht berücksichtigt wird. Wenn die Ansicht hinzugefügt wird, wird sie mit x = 0, y = 0, w = 320 h = 460 anstelle von (0,0,320,480) erstellt, wie ich es erwartet hätte. Nachdem Sie die Höhe auf 480 geändert und mit dem Eigentümer der Datei verbunden und die Farbe geändert haben, um sie in Bezug auf den Hintergrund unverwechselbar zu machen. Ich gehe davon aus, dass sich zwischen dem oberen Bildschirmrand und der Ansicht ein weißes Band befand. Ich habe meinen Code erweitert mit:

#define RECTLOG (rect) (NSLog (@ "" #rect @ "x:% fy:% fw:% fh:% f", rect.origin.x, rect.origin.y, rect.size.width, rect .size.height));

innerhalb von viewDidLoad

- (void) viewDidLoad {
    [super viewDidLoad];
    RECTLOG (self.view.frame);
}}

Es stellt sich heraus, dass die Ansicht so ist, wie sie von IB geladen wurde, tatsächlich (0, 20, 320, 480). Um dies zu umgehen, habe ich den Rahmen der Ansicht mit self.view.frame = CGRectMake (0, 0, 320, 480) zurückgesetzt.

Ich benutze IB 3.2.5

Ich würde gerne eine kleine Lösung für dieses Problem kennen.

Cramhead
quelle
3
Zu Ihrer Information, Sie können NSStringFromCGRect (rect) verwenden, um eine druckbare Zeichenfolge zu erhalten, die ein CGRect darstellt.
Berry
Das war eine großartige Information, ich habe es ausprobiert, und Sie können tatsächlich einen Zeichenfolgenwert von CGPoint und CGSize erhalten! sehr kochen, danke.
FierceMonkey
1

Ich habe festgestellt, dass die beim Erstellen der xib-Datei automatisch erstellte UIView nicht über das Größenfenster oder die Kantengriffe in der Größe geändert werden kann.

Ich habe lediglich ein weiteres UIView hinzugefügt und alles von meinem alten UIView auf das neue gezogen und dann das alte gelöscht.

Es hat das Problem für mich gelöst, aber ich denke, es gibt ein zugrunde liegendes Problem mit dem Interface Builder, das Apple lösen kann (jemand korrigiert mich, wenn ich falsch liege).

Ich verwende den integrierten Schnittstellen-Builder für XCode 4.

PowerAktar
quelle
0

Ich habe es anders aussortiert ...

Öffnen Sie Ihre XIB mit Ihrem bevorzugten Texteditor und bearbeiten Sie diese Zeile

        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CompassViewController">

CompassViewController ist Ihr Klassenname, mit dem Sie Ihre nib / xib verknüpfen möchten.

Bearbeiten Sie einfach Ihren Klassennamen mit dem richtigen Klassennamen und Sie sind fertig;)

jeet.chanchawat
quelle
0

Geben Sie hier die Bildbeschreibung einWählen Sie im Storyboard die UIVIew aus und wechseln Sie zum Attributinspektor. Ändern Sie die UIVIew-Größe in "FreeForm" anstelle von "Inferred".

Jane.Abraham
quelle