2013-02-10 14 views
11

W aplikacji Apple iPhone Clock, gdy użytkownik doda nowy alarm, pojawi się widok modalny. Próbuję utworzyć interfejs podobny do tego.Nie można zmienić wysokości UITableView

Aktualnie mam kontroler UITableViewController jako kontroler widoku głównego kontrolera UINavigationController.

Mam też UIDatePicker dodany jako podrzędny do UINavigationController:

[self.navigationController.view addSubview:mydatePicker]; 

Jednak mam około 10+ wierszy w moim UITableView (to z UITableViewController) i jak tylko dodałem UIDatePicker I nie można przewinąć, aby wyświetlić wszystkie komórki.

Zdałem sobie sprawę, że rozmiar UITableView jest taki sam, jak przed dodaniem UIDatePicker, i dlatego musiałbym zmienić jego rozmiar, aby móc przewijać, aby zobaczyć wszystkie komórki tabeli.

Próbowałem kilku rzeczy, aby zmienić jego rozmiar, wszystko bezskutecznie. W poniższym kodzie arbitralnie wybrałem 50 dla nowej wysokości.

Najpierw próbowali zmienić wysokość bounds:

CGRect bounds = [self.tableView bounds]; 
[self.tableView setBounds:CGRectMake(bounds.origin.x, 
            bounds.origin.y, 
            bounds.size.width, 
            50)]; 

Potem próbował zmienić wysokość ramy:

CGRect tvframe = [self.tableView frame]; 
[self.tableView setFrame:CGRectMake(tvframe.origin.x, 
            tvframe.origin.y, 
            tvframe.size.width, 
            50)]; 

Następnie po googlowania kilka próbowałem zmieniając wysokość contentSize:

CGSize thesize = self.tableView.contentSize; 
thesize.height = 50; 
self.tableView.contentSize = thesize; 

Żadne z nich nie miało żadnego wpływu na rozmiar UITableView. Nadal nie mogłem przewinąć, aby zobaczyć wszystkie komórki.

Później wypróbowałem niektóre z tych samych metod co powyżej, ale na UINavigationController zamiast UITableView. Nie miałem też szczęścia w tym.

W ostateczności próbowałem zmienić rozmiar UITableView w edytorze scenorysów. Nie mogłem tego rozgryźć.

Dziękujemy za pomoc.

+1

Czy używasz kontrolki UITableViewController? Użycie zwykłego interfejsu UITableView w niestandardowym kontrolerze UIViewController zwykle sprawia, że ​​mniej dziwactw do wykonania. – Kekoa

+0

Tak, używam UITableViewController (faktycznie mam niestandardową klasę, która dziedziczy/implementuje UITableViewController). Zaktualizuję wpis, aby to odzwierciedlić. – dtmland

Odpowiedz

18

Z UITableViewControllerclass reference, to:

tworzy nieskonfigurowaną obiektu UITableView z prawidłowymi wymiarami i AUTORESIZE maskować

I cytat z Table View Programming Guide for iOS który specjalnie rozwiązuje ten problem:

Uwaga: Powinieneś użyć podklasy UIViewController zamiast podklasy z UITableViewController, aby zarządzać widokiem tabeli, jeśli zarządzany widok składa się z wielu subskrybentów, z których tylko jeden to widok tabeli . Domyślnym zachowaniem klasy UITableViewController jest , aby widok tabeli wypełnił ekran między paskiem nawigacji a paskiem kart (jeśli są one obecne).

Jeśli nie chcesz, aby kontroler widoku tabeli ustawiał wielkość tableView, musisz zamiast tego użyć UIViewController. Zobacz link zamieszczony powyżej w Przewodniku po programowaniu w systemie iOS, aby zapoznać się z innymi kwestiami, które należy wziąć pod uwagę podczas podróży tą trasą.

+8

Apple nienawidzę cię czasami za zrobienie takiego bałaganu ...! – NightFury

0

Musisz uczynić UITableView widokiem z widoku głównego, aby niezawodnie zmienić jego rozmiar.

Ramka to poprawna wartość, którą należy zmienić po wprowadzeniu tej zmiany.

+0

Mam obecnie UITableview w ramach UITableViewController, czy to nie wystarcza? Przez "główny widok" masz na myśli UINavigationController? – dtmland

+0

A może masz na myśli utworzenie nowego UIViewController jako kontrolera widoku głównego kontrolera UINavigationController i dodanie do niego UITableView? Jak by to było inne niż praca z UITableview w ramach UITableViewController? – dtmland

+0

Co mam na myśli, to dodać UITableView jako wyekspozycję widoku. ViewController. Brakowało mi, że używasz UITableViewController, Inafziger jest poprawny. – Brane

0

Nie wiem, jaki jest twój prawdziwy problem. ale dla zmiany wysokości twojego UITableView i wyświetli wszystkie wiersze w UITableView napisz następujący kod.

self.tblView.frame = CGRectMake(0, 0, 320, 50); 

proszę spróbować.

+0

Próbowałem już tego, o czym wspomniałem w poście. To nie działa. Mój problem polega na odpowiedzi udzielonej przez lnafziger. – dtmland

0

Twój bierze kontroler uitableview, zamiast tego użyć kontrolera uiviewcontroller, który dodaje widok uitabelview. Teraz możesz mieć rozmiar uitableview.

3

Miałem ten sam problem, o którym wspomniałeś. Nie można zmienić wysokości tableView elementu UITableViewController. Próbowałem zmienić ramkę i centra self.view i self.tableview. Ale zawiodło. Potem rozwiązałem go podstępem, zmieniając zawartość tableInset.

self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 44.0f, 0); // here you can replace 44.0f with your height 
Powiązane problemy