Nie można zmienić rozmiaru UIView w IB


88

Prawdopodobnie coś prostego, ale nie mogę zrozumieć, dlaczego nie mogę zmienić rozmiaru UIView w xib w Interface Builder.

Utworzyłem nowy widok XIB w xcode iw inspektorze rozmiaru, szerokość i wysokość są wyłączone i wyszarzone do 320 na 460. To dziwne, ponieważ mogę zmienić rozmiar dla pozostałych dwóch widoków (związanych z pozostałymi dwoma paskami kart przedmiotów).

Nie jestem pewien, czy ma to coś wspólnego, ale ostatnio zaktualizowałem SDK do 3.

Dzięki!

Odpowiedzi:


81

Myślę, że nie można edytować rozmiaru podczas symulacji jakichkolwiek elementów interfejsu użytkownika, takich jak pasek stanu w Interface Builder. Możesz spróbować wyłączyć symulowane elementy, jeśli jakieś są włączone. Nie jestem pewien, dlaczego tak jest, więc doceniłbym opinie od każdego, kto dokładnie wie, dlaczego tak jest - musi być dobry powód.


1
Dzięki, zgadza się. Po uaktualnieniu xcode i IB pasek stanu był domyślnie włączony. Inni mają to wyłączone.

1
Podobnie jak w Xcode 4.2, iOS 5.0.1 to się zmieniło. Moja odpowiedź poniżej wyjaśnia, jak można to osiągnąć.
— lol

1
Bardzo pomocny. Po prostu wyłącz pasek stanu, dostosuj rozmiar, a następnie włącz go ponownie.
— Wollan,

9
To ustawienie działało dla ViewController.xib w Xcode 4.3.3: „Symulowane metryki - Rozmiar: dowolna”. Następnie ustawienie rozmiaru widoku jest włączone. Usuń także opcję „Tryb wyświetlania”, aby wypełnić opcję wypełnienia (tuż poniżej symulowanych danych).
— defvol

uuuugh Naprawdę nie podoba mi się to IDE
— Saik Caskey

80

Aby to osiągnąć w XCode 4.6.3 / 5.0.2, musisz wykonać zrzut ekranu poniżej:

  1. W sekcji „Inspektor plików” -> odznacz Use Auto Layout
  2. Kliknij Selektor atrybutów i wybierz Freeformrozmiar

Jest to potrzebne podczas tworzenia headerView dla tableView

wprowadź opis obrazu tutaj


40

Część, której szukasz, znajduje się w pierwszym panelu Inspektora (Command-1). U góry znajduje się sekcja oznaczona jako Symulowane elementy interfejsu użytkownika. Domyślnie pasek stanu jest włączony. Musisz upewnić się, że wszystkie trzy są ustawione na Brak.


2
Dzięki, te odpowiedzi pozwoliły mi zaoszczędzić mnóstwo czasu! Czy ktoś wie, dlaczego IB to robi?
— Gregor

Dzięki stary. Szukałem tego.
— natanavra

Uwaga dla wszystkich, teraz jest to: „Nieokreślone” zamiast „Brak”. (Mam wersję 3.2.3)
— IcyBlueRose

Potwierdzam, że iPad jest „nieokreślony”, dziękuję Thomas Mon, zaoszczędziłeś mi kilka godzin: D
— Qlimax

Widzę to tylko dla kontrolerów widoku, a nie widoków
— BigBoy1337

26

Podobnie jak w Xcode 4.2, iOS 5.0.1, domyślne symulowane metryki obejmują symulację atrybutu „size” UIViewControllers na „Inferred”

Jeśli zmienisz ten atrybut na „Swobodny”, możesz zmienić rozmiar UIView zawartego w UIViewController, jednocześnie symulując pasek stanu (lub dowolną inną symulację w tym zakresie)


1
Atrybut rozmiaru jest teraz domyślnie ustawiony na „Pełny ekran Retina 4”, ale zmiana go na „Dowolny” nadal działa.
— Pier-Luc Gendreau

4

Po prostu przejdź do inspektora, przejdź do pierwszego panelu (lub naciśnij klawisz Command-1), a następnie zmień pola oznaczone Pasek stanu, Górny pasek i Dolny pasek na Brak w sekcji „Symulowane elementy interfejsu użytkownika”. Może być konieczne kliknięcie małego trójkąta, aby były widoczne.


1

Zabawne, że mam podobny problem. Usunąłem wszystkie widoki z pliku xib i ponownie dodałem widok. Ustaw pasek stanu na „nieokreślony”, aby pasek stanu nie był dostosowany. Po dodaniu widok zostanie utworzony z x = 0, y = 0, w = 320 h = 460 zamiast (0,0,320,480), jak bym się spodziewał. Po zmianie wysokości na 480 i podpięciu go do właściciela pliku i zmianie koloru tak, aby wyróżniał się w stosunku do tła. Zauważyłem, że między górną częścią ekranu a widokiem był biały pasek. Rozszerzyłem swój kod o:

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

w ramach viewDidLoad

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

Okazuje się, że widok jest taki, jaki jest załadowany z IB, w rzeczywistości (0, 20, 320, 480). Aby obejść ten problem, zresetowałem ramkę widoku za pomocą self.view.frame = CGRectMake (0, 0, 320, 480);

Używam IB 3.2.5

Chciałbym wiedzieć, jak to naprawić.


3
FYI, możesz użyć NSStringFromCGRect (rect), aby uzyskać drukowalny ciąg reprezentujący CGRect.
— Berry

To była świetna informacja, sprawdziłem to i faktycznie możesz uzyskać wartość ciągu z CGPoint i CGSize! bardzo gotuję, dzięki.
— FierceMonkey

1

Zauważyłem, że UIView utworzony automatycznie podczas tworzenia pliku xib nie może być zmieniany z panelu rozmiaru lub uchwytów krawędzi.

Wszystko, co zrobiłem, to dodać kolejny UIView i przeciągnąłem wszystko ze starego UIView do nowego, a następnie usunąłem stary.

Rozwiązało to dla mnie problem, ale tak, myślę, że istnieje podstawowy problem z konstruktorem interfejsu, który Apple ma rozwiązać (ktoś mnie poprawi, jeśli się mylę).

Używam wbudowanego konstruktora interfejsu XCode 4.


0

Ułożyłem to w inny sposób ...

otwórz swój xib w swoim ulubionym edytorze tekstu i edytuj tę linię

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

CompassViewController to nazwa twojej klasy, z którą próbujesz połączyć swój nib / xib.

Po prostu edytuj nazwę klasy, wpisując poprawną nazwę klasy i gotowe;)


0

wprowadź opis obrazu tutajW scenorysie wybierz UIVIew i przejdź do inspektora atrybutów zmień rozmiar UIVIew na „FreeForm” zamiast na „Inferred”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.