2013-01-15 5 views
6

Wydaje się to tak proste, nie mogę zrozumieć, dlaczego się nie zgadza. Próbuję zmienić rozmiar UIButton z obsługi innej niż touchUpInside. Aby wykonać repro, utworzyłem nowy projekt (iOS 6) w Xcode i przeciągnąłem dwa przyciski do pliku XIB, który został domyślnie utworzony. Obsługę touchUpInside dla button1 pokazano poniżej. Jeśli dołączę tylko instrukcję ustawiającą origin.x z button2, widzę ruch zgodnie z oczekiwaniami. Jednak instrukcja ustawiająca przycisk size.width przycisku nie działa. Jeśli uwzględnię to stwierdzenie, pochodzenie również się nie zmieni.Nie można zmienić rozmiaru UIButtonu

mogę zmienić rozmiar przycisku grzywny w projektancie XIb i jedyną własność mam ustawione (inne niż

- (IBAction)buttonPressed:(id)sender { 
    CGRect f = self.button2.frame; 
    f.origin.x += 10; 
    // this doesn't work, including it prevents even the origin change from working 
    f.size.width += 10; 
    self.button2.frame = f; 
} 

Jak można z powodzeniem zmienić rozmiar przycisku?

Dzięki!

+1

Próbowałem go i kod wydaje się być rzeczywiście działa. Czy jesteś pewien, że ta zmiana ramek nie ma nic wspólnego z obrazem/tłemImage przycisku? A także, jaki jest typ przycisku? –

+0

self.button2 może być nieobecny w tej metodzie. Sprawdź, czy .. Możesz pobrać referencję przycisku od nadawcy. –

+0

Yunus, stworzyłem nowy projekt i dodałem zaokrąglenie rect do domyślnego xib, aby to zmienić. Brak obrazu (tło lub pierwszy plan). Anusha: nie jest zerowy i nie działa również z drugim przyciskiem. – mcobrien

Odpowiedz

7

Na pewno używasz autoLayout, po prostu co happ pl tutaj jest mechanizm iOS AutoLayout, który próbuje automatycznie ustawić twój układ. spróbuj kodu, wyłączając AutoLayout. mam nadzieję, że wiesz, jak wyłączyć automatyczny układ w xcode, jeśli nie daj mi znać.

Szczęśliwe kodowanie !!!

EDIT:

autoLayout pochodzi z iOS 6, to dlaczego Twój kod działał w starszych wersjach (iOS 5). przy okazji Nick powiedział, że możesz wyłączyć AutoLayout w inspektorze plików w kodzie Xcode.

Zobacz załączony zrzut ekranu.

enter image description here

+0

Zastanawiam się, czy przyczyną tego może być funkcja AutoLayout. Wydaje się, że nigdy nie zdarzyło się to w przypadku moich projektów iOS 5. Jak mogę go wyłączyć lub (lepiej), jaki jest właściwy sposób, aby to działało z AutoLayout? – mcobrien

+1

można wyłączyć autolayout w Inspektorze plików w konstruktorze interfejsów – Nick

+1

To wszystko, dziękuję bardzo! Stwierdziłem też, że jeśli chcę nadal używać AutoLayout (brzmi dobrze, i nie chcę go odrzucić bez uczenia się więcej :), mogę przypiąć szerokość przycisku (wybierając go, a następnie klikając trochę " Przycisk "H" w prawym dolnym rogu projektanta IB), dodaj gniazdo dla dodanego właśnie ograniczenia i dostosuj jego stałą właściwość, aby programowo zmieniać szerokość w czasie wykonywania. Jest to dość zawiłe (może jest łatwiejszy sposób?), Ale cieszę się, że zaczyna to mieć sens. – mcobrien

3

Spróbuj:

CGRect buttonFrame = button.frame; 
buttonFrame.size = CGSizeMake(150, 70); 
button.frame = buttonFrame; 
+2

Nie działa, jeśli włączony jest automatyczny układ. – Groot

0

Pracuj z granicami:

[self.button setBounds:CGRectMake(0, 0, 400, 400)];

Works czy układ automatycznego trwa! Jak zawsze, upewnij się, że Twój gniazdek jest odpowiednio skonfigurowany, abyś mógł rozmawiać z przyciskiem.

Można to zrobić również w układzie automatycznym. Usuń ograniczenia szerokości i wysokości i dodaj nowe, ale jeśli nie masz ograniczenia szerokości lub wysokości na swoim przycisku (prawdopodobnie mądry), po prostu ustaw granice i jeśli nie musisz zmieniać pozycji przycisku, to po prostu działaj jako automatyczny układ automatycznie aktualizuje wiązania po zmianie granic przycisków.

BTW, nigdy nie należy dotykać ramki przycisków, chyba że używasz jej do ręcznego ustawiania obiektu. Granice służą do wymiarowania, ramka służy do pozycjonowania.

0

Wyłączenie automatycznego układu może nie być najlepszym rozwiązaniem.

Jedną z możliwości jest ustawienie tytułu przypisanego przycisku przed, a teraz zmiana rozmiaru czcionki tytułu nie będzie działać.Musisz ponownie ustawićAttributedTitle

0

Jeśli próbujesz zmienić długość tekstu o długości UIButton, zostaniesz ograniczony domyślną długością, a gdy jest zbyt długa, zostanie zastosowana podziałka linii (np. Obcięcie ogona lub trzy kropki). Zmienić domyślny rozmiar przez:

yourButton.setTitle("yourString", for: UIControlState.normal)

To będzie pracować dla większości przypadków, ale nie wszystkie UIControlState s