2013-09-02 20 views
36

Mam UIView, chcę zmienić rozmiar, gdy użytkownik dotknie przycisku.Zmiana rozmiaru UIView programowo

CGRect newFrame = self.myview.frame; 

newFrame.size.width = 200; 
newFrame.size.height = 200; 
[self setFrame:newFrame]; 

CGRect newFrame = self.searchField.frame; 

newFrame.size.width = 200; 
newFrame.size.height = 200; 
self.searchField.frame=newFrame; 

Żadna z nich nie działa, niczego nie zmieniaj. Chcę ustawić stałą szerokość i wysokość na UIView.

+0

Czy to w pliku implementacji widoku kontroler? –

+0

@Tim Bodeit yes. – onivi

Odpowiedz

71

Jeśli dobrze rozumiem, chcesz zmienić rozmiar self.myview. Jednak w żadnym momencie nie ustawiasz tej ramki. Zamiast tego próbujesz wywołać sendFrame: na kontrolerze widoku i pewnym polu wyszukiwania. Jestem zaskoczony, że ten pierwszy nie dał błędu kompilatora.

Spróbuj:

CGRect newFrame = self.myview.frame; 

newFrame.size.width = 200; 
newFrame.size.height = 200; 
[self.myview setFrame:newFrame]; 
+1

Czy osoba zainteresowana komentarzem dlaczego? –

+4

kod ten wydaje się nie mieć wpływu na UICollectionView – Gerry

+0

@Gerry: Będzie działać na UICollectionView. Chociaż nie zadziała na komórkach wewnątrz widoku kolekcji. Rozmiary te są ustalane przez układ używany do widoku kolekcji, a nie przez same widoki. Zobacz kolekcjęView: layout: sizeForItemAtIndexPath z protokołu UICollectionViewDelegateFlowLayout –

5
view.frame = newframe; 

lub

view.center = newcenter; 
4

W moim przypadku, miałem na ograniczenie szerokości moim zdaniem, więc nie mogłem zmienić szerokość jak powiedział Tim .

Co zrobiłem: Stworzyłem gniazdko na mojej konstelacji, na przykład myviewWidthConstraint. Następnie użyłem tego wylotu, aby zmienić szerokość moim zdaniem tak:

mycell.myviewWidthConstraint.constant = newSize; 
0

pola rozmiaru są tylko do odczytu, tylko złożyć nową -

//Set height 
let f = view.frame;  //Grab current 
view.frame = CGRect(x: f.origin.x, y: f.origin.y, width: f.width, height: 200);