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.