2014-04-23 26 views
5

Mam kontroler View, w którym widok ma dwa widoki obrazu i dwa widoki tekstowe. Wyłączyłem automatyczny układ i programowo ustawiłem odległość między pierwszym widokiem tekstowym a pierwszym widokiem obrazu przy użyciu tego kodu: Poniższy kod jest w metodzie viewDidLoad mojej niestandardowej klasy kontrolera widoku. W obu przypadkach ustawiłem maskę autoreizing na No, więc nie mam pojęcia, dlaczego kod nie działa. (tf2_logo jest widok obrazu i itemName jest widok tekstowy)Ograniczenia nie działa z UITextView

self.tf2_logo.translatesAutoresizingMaskIntoConstraints = NO; 
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.itemName attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.tf2_logo attribute:NSLayoutAttributeTop multiplier:1.0 constant:-1.0]]; 
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.tf2_logo attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.backpackBackground attribute:NSLayoutAttributeLeft multiplier:1.0 constant:17]]; 

Teraz chcę zrobić to samo z moim drugim widoku tekstu, w zasadzie chciałem zachować odległość między widoku tekstu ItemName a tekstem zobaczyć w pewnej odległości. Użyłem tego kodu: (TF2 jest mój drugi widok tekstowy)

self.tf2.translatesAutoresizingMaskIntoConstraints = NO; 
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.itemName attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.tf2 attribute:NSLayoutAttributeTop multiplier:1.0 constant:-3.0]]; 
[self.backpackBackground addConstraint:[NSLayoutConstraint constraintWithItem:self.tf2 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.tf2_logo attribute:NSLayoutAttributeRight multiplier:1.0 constant:20]]; 

Po wprowadzeniu tego kodu, widok tekst TF2 nawet nie pokazać się w kontrolerze widoku. Jaki jest problem?

EDIT: Można pobrać cały projekt tutaj: https://www.dropbox.com/sh/u820u2ndyrncuz8/P4atI-9CAx

Odpowiedz

2

EDIT # 2: Wspomniałeś, że został wyłączony układ automatycznego, ponieważ UITextView ma tę małą szczelinę na górze w iOS7. Aby usunąć tę lukę, spróbuj tego:

self.tf1.textContainerInset = UIEdgeInsetsZero; 

Po zalogowaniu pierwotną wartość textContainerInset to pokazuje: {8, 0, 8, 0}. Obie 8 są odpowiedzialne za lukę (jedna na górze). Powyższa linia ustawia wszystkie wartości na zero, a zawartość jest ładnie wyrównana do górnej krawędzi ramki.

(EDIT # 1: całkowicie zmienił odpowiedź)

Zakładam, że przede wszystkim chcą mieć elastyczne wysokość imageNameUITextView. Najpierw proponuję użyć automatycznego układu. Można ustawić ograniczenia w Xcode według poniższego obrazka:

Constraints

Czerwone linie są ograniczenia. Zielona linia jest wyjątkowa: będzie to ograniczenie wysokości i utworzysz dla niej ujście w kontrolerze widoku. (Otwórz widok konspektu dokumentu zlokalizuj ograniczenie wysokości w drzewie i kontrolno-przeciągnij go do kodu.)

Następnie w metodzie viewDidLoad:

CGSize size = [self.tf1 sizeThatFits:self.tf1.frame.size]; 
self.tf1Height.constant = size.height; 

Wysokość polu „Lore ipsum” teraz dostosowuje się do jego treści.

Screenshot

+0

Możesz pobrać projekt tutaj: https: //www.dropbox.com/sh/u820u2ndyrncuz8/P4atI-9CAx –

+0

Nie chciałem używać autolayout, ponieważ dla UITextView pod dużym UIImageView, chciałem, aby tekst zaczynał się w górnej części widoku tekstowego, a nie w środku, jak zwykle to umieszcza xcode. Sprawdziłem, jak to zrobić na Stackoverflow, a użytkownik zasugerował, że wyłączam autolayout. –

+0

Czy możesz podać więcej szczegółów na temat problemu z umieszczaniem tekstu? Z moimi testami w UITextView tekst znajduje się u góry (z UILabelami siedzi w pionowym środku). –

-3

Czy próbowali za pomocą ramek zamiast ograniczenia? Jeśli nie korzystasz z autolayout, myślę, że ramki mogą być łatwiejsze do odczytania/zaimplementowania.

próbki:

// tf2 will be placed at (0,0) in superview and have width of 100 and height of 20 

tf2.frame = CGRectMake(0, 0, 100, 20); 

można poeksperymentować z różnymi wartościami, aby uzyskać układ zgodnie z zapotrzebowaniem.

+0

Myślę, że masz rację, że są one łatwiejsze, ale nie są takie same funkcjonalność. – sammysounder