Jak uzyskać wymiary ekranu w iOS?
Problem z opublikowanym kodem polega na tym, że liczysz na rozmiar widoku odpowiadający rozmiarowi ekranu, a jak już zauważyłeś, nie zawsze tak jest. Jeśli potrzebujesz rozmiaru ekranu, powinieneś spojrzeć na obiekt reprezentujący sam ekran, w następujący sposób:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
Aktualizacja podzielonego widoku: W komentarzach Dmitry zapytał:
Jak mogę uzyskać rozmiar ekranu w podzielonym widoku?
Podany powyżej kod zgłasza rozmiar ekranu, nawet w trybie podzielonego ekranu. Gdy używasz trybu podzielonego ekranu, zmienia się okno aplikacji. Jeśli powyższy kod nie zawiera oczekiwanych informacji, to podobnie jak PO, patrzysz na niewłaściwy obiekt. W takim przypadku powinieneś jednak spojrzeć na okno zamiast na ekran:
CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;
Szybki 4.2
let screenRect = UIScreen.main.bounds
let screenWidth = screenRect.size.width
let screenHeight = screenRect.size.height
// split screen
let windowRect = self.view.window?.frame
let windowWidth = windowRect?.size.width
let windowHeight = windowRect?.size.height
[UIScreen scale]
.CGRectGetWidth()
iCGRectGetHeight()
zamiast bezpośredniego dostępu dosize
pola w prostokącie. Nie sądzę, aby kiedykolwiek pojawił się problem z prostokątem ekranu, ale przypuszczam, że należy o tym pamiętać.Ostrożnie, [Główny ekran UIScreen] zawiera również pasek stanu, jeśli chcesz pobrać ramkę dla swojej aplikacji (bez paska stanu), powinieneś użyć
źródło
return [[UIScreen mainScreen] bounds].size.width;
Przetłumaczyłem niektóre z powyższych odpowiedzi Celu C na kod Swift. Każde tłumaczenie jest poprzedzone odniesieniem do oryginalnej odpowiedzi.
Główna odpowiedź
Prosta funkcja odpowiedzi
Odpowiedź dotycząca orientacji urządzenia
Zaloguj się
źródło
return UIScreen.mainScreen().bounds].size.width
Wcześniej stosowałem następujące metody wygody:
źródło
Zdaję sobie sprawę, że jest to stary post, ale czasami uważam, że przydatne jest #define stałe takie jak te, więc nie muszę się o to martwić:
Powyższa stała powinna zwracać prawidłowy rozmiar bez względu na orientację urządzenia. Zatem uzyskanie wymiarów jest tak proste, jak:
źródło
Bardzo, bardzo łatwo jest uzyskać rozmiar urządzenia, a także wziąć pod uwagę orientację:
źródło
UIAlertView
wstawi się jako widok rootViewController keyWindow. Mam logikę, która pozwala uniknąć narożnika, ponieważ jeśli pojawia się widok alertu, użytkownik nie może wchodzić w interakcje z klawiaturą, więc zwykle nie ma potrzeby chwytania ramki klawiatury w tym czasie.Musimy również wziąć pod uwagę orientację urządzenia:
źródło
źródło
Tutaj zaktualizowałem do Swift 3
applicationFrame przestarzałe z iOS 9
W szybkich trzech usunęli () i zmienili kilka konwencji nazewnictwa, możesz odwołać się tutaj Link
źródło
Nowoczesna odpowiedź:
jeśli Twoja aplikacja obsługuje podzielony widok na iPadzie, problem ten staje się nieco skomplikowany. Potrzebujesz rozmiaru okna, a nie ekranu, który może zawierać 2 aplikacje. Rozmiar okna może się również różnić podczas działania.
Użyj rozmiaru głównego okna aplikacji:
Uwaga: powyższa metoda może mieć niepoprawną wartość, zanim okno stanie się kluczowym oknem podczas uruchamiania. jeśli potrzebujesz tylko szerokości, bardzo zalecana jest metoda poniżej :
Używanie starego rozwiązania
UIScreen.main.bounds
zwróci granice urządzenia. Jeśli Twoja aplikacja działa w trybie podzielonego widoku, ma nieprawidłowe wymiary.self.view.window
w najgorętszej odpowiedzi może mieć zły rozmiar, gdy aplikacja zawiera 2 lub więcej okien, a okno ma mały rozmiar.źródło
Skorzystaj z nich,
Structs
aby poznać przydatne informacje o bieżącym urządzeniu w Swift 3.0źródło
Jeśli chcesz szerokość / wysokość ekranu niezależnie od orientacji urządzenia (dobre do zmiany rozmiaru tylko kontrolery widoku uruchamiane z orientacji poziomej):
źródło
Oto szybki sposób uzyskania rozmiarów ekranu:
Są one zawarte jako funkcja standardowa w:
https://github.com/goktugyil/EZSwiftExtensions
źródło
CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;
źródło
szybki 3.0
dla szerokości
na wysokość
źródło
Możesz umieścić te makra w pliku pch i używać ich w dowolnym miejscu w projekcie, używając „SCREEN_WIDTH”
i „SCREEN_HEIGHT”
Przykład użycia:
źródło