Mam kilka (pogrupowanych stylów) tabel w mojej aplikacji na iPhone'a (tylko na części ekranu i dodałem, Interface Builder
ale nie podklasę od UITableViewController
), że 80% czasu jest małe i zmieści się na ekranie. Gdy stół zmieści się na ekranie, chciałbym wyłączyć przewijanie, aby było trochę czystsze. Ale jeśli tabela zejdzie z ekranu (gdy zostaną do niej później dodane wiersze), chciałbym ponownie włączyć przewijanie (ponieważ w przeciwnym razie nie zobaczysz tej zawartości).
Czy jest na to sposób? Nie mogę tego rozgryźć. Wiem, że muszę:
tableView.scrollEnabled = NO;
ale nie jestem pewien, gdzie, ani czy muszę obliczyć rozmiar obiektu tabeli lub coś, aby to zadziałało.
Aktualizacja : Oto rozwiązanie, które w końcu dla mnie zadziałało:
if (table.contentSize.height < table.frame.size.height) {
table.scrollEnabled = NO;
}
else {
table.scrollEnabled = YES;
}
Uruchamiam ten kod po wywołaniu reloadData
na stole, a on oblicza odpowiednie rozmiary i wydaje się działać.
table.frame.size.height
to rzeczywisty rozmiar obiektu (można to zobaczyć Interface Builder
) wyświetlany na ekranie, natomiast table.contentSize.height
wysokości: nagłówek, stopka i wysokość każdej komórki zsumowane.
źródło
Odpowiedzi:
Myślę, że chcesz ustawić
źródło
interface builder
odznaczając odbijanie i odbijanie w poziomie / w pionie.Za pomocą tej funkcji możesz zweryfikować liczbę widocznych komórek:
Ta metoda zwróci tablicę z widocznymi komórkami, dzięki czemu możesz policzyć liczbę obiektów w tej tablicy i porównać z liczbą obiektów w tabeli .. jeśli jest równa .. możesz wyłączyć przewijanie za pomocą:
Jak wspomniała @Ginny ... moglibyśmy mieć problemy z częściowo widocznymi komórkami, więc to rozwiązanie działa lepiej w tym przypadku:
W przypadku korzystania z autoLayout to rozwiązanie wykonuje zadanie:
źródło
if (table.contentSize.height < table.frame.size.height)
>> zobacz edycję w oryginalnym poście.W Swift:
źródło
Istnieje więc wiele odpowiedzi i wymaga całej zawartości jednocześnie, więc dodam tę odpowiedź:
Jeśli używasz AutoLayout, ustawienie tej opcji powinno działać tylko dla Ciebie:
tableView.alwaysBounceVertical = false
Znajdź tę opcję i opcję
untick
„Bounce Vertically
”.Oto odniesienie:
Jeśli nie korzystasz z AutoLayout:
źródło
Spróbuj tego
źródło
Możesz ustawić włączanie / wyłączanie odrzuceń lub przewijanie widoku tabeli, zaznaczając / odznaczając je w obszarze Widok przewijania
źródło
Możesz edytować to w swoim scenorysie (jeśli go używasz). Pod widokiem tabeli znajduje się pole wyboru z napisem „Przewijanie włączone”. Odznacz to i gotowe.
źródło
// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;
źródło
Domyślna wysokość to 44,0 f dla komórki widoku tabeli. Musisz mieć źródło danych pod ręką w tablicy? Następnie po prostu sprawdź, czy
[array count]*44.0f
wykracza poza ramy ramki, a jeśli taktableview.scrollEnabled = NO
, ustaw go na TAK. Zrób to tam, gdzie obliczasz źródło danych dla tego konkretnego widoku tabeli.źródło