Cześć, zastanawiam się, czy istnieje sposób na programowe uzyskanie szerokości.
Szukam czegoś na tyle ogólnego, aby pomieścić iPhone'a 3gs, iPhone'a 4, iPada. Ponadto szerokość powinna się zmieniać w zależności od tego, czy urządzenie jest ustawione pionowo czy poziomo (w przypadku iPada).
Czy ktoś wie, jak to zrobić? Szukałem przez chwilę ... dzięki!
iphone
objective-c
cocoa-touch
ipad
Shai UI
źródło
źródło
Odpowiedzi:
Spójrz na UIScreen .
na przykład.
CGFloat width = [UIScreen mainScreen].bounds.size.width;
Spójrz na właściwość applicationFrame, jeśli nie chcesz dołączać paska stanu (nie wpłynie to na szerokość).
UPDATE: Okazuje się, że UIScreen (-bounds lub -applicationFrame) nie uwzględnia bieżącej orientacji interfejsu. Bardziej poprawnym podejściem byłoby poproszenie twojego UIView o jego granice - zakładając, że ten UIView został automatycznie obrócony przez jego kontroler widoku.
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { CGFloat width = CGRectGetWidth(self.view.bounds); }
Jeśli widok nie jest automatycznie obracany przez kontroler widoku, będziesz musiał sprawdzić orientację interfejsu, aby określić, która część granic widoku reprezentuje „szerokość” i „wysokość”. Zauważ, że właściwość frame da ci prostokątny widok w przestrzeni współrzędnych UIWindow, który (domyślnie) nie będzie uwzględniał orientacji interfejsu.
źródło
CGRect screen = [[UIScreen mainScreen] bounds]; CGFloat width = CGRectGetWidth(screen); //Bonus height. CGFloat height = CGRectGetHeight(screen);
źródło
Można to zrobić w 3 wierszach kodu :
// grab the window frame and adjust it for orientation UIView *rootView = [[[UIApplication sharedApplication] keyWindow] rootViewController].view; CGRect originalFrame = [[UIScreen mainScreen] bounds]; CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];
źródło
Od wersji iOS 9.0 nie ma sposobu, aby wiarygodnie uzyskać orientację. Oto kod, którego użyłem do aplikacji, którą projektuję tylko w trybie pionowym, więc jeśli aplikacja zostanie otwarta w trybie poziomym, nadal będzie dokładna:
screenHeight = [[UIScreen mainScreen] bounds].size.height; screenWidth = [[UIScreen mainScreen] bounds].size.width; if (screenWidth > screenHeight) { float tempHeight = screenWidth; screenWidth = screenHeight; screenHeight = tempHeight; }
źródło
Użyj tego kodu, to pomoże
[[UIScreen mainScreen] bounds].size.height [[UIScreen mainScreen] bounds].size.width
źródło
posługiwać się:
NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ;
źródło
Oto szybki sposób na uzyskanie rozmiarów ekranu, który uwzględnia również aktualną orientację interfejsu:
var screenWidth: CGFloat { if UIInterfaceOrientationIsPortrait(screenOrientation) { return UIScreen.mainScreen().bounds.size.width } else { return UIScreen.mainScreen().bounds.size.height } } var screenHeight: CGFloat { if UIInterfaceOrientationIsPortrait(screenOrientation) { return UIScreen.mainScreen().bounds.size.height } else { return UIScreen.mainScreen().bounds.size.width } } var screenOrientation: UIInterfaceOrientation { return UIApplication.sharedApplication().statusBarOrientation }
Są one zawarte jako standardowa funkcja w:
https://github.com/goktugyil/EZSwiftExtensions
źródło