Jak wykryć model urządzenia za pomocą makra? Miałem za pomocą czegoś takiego, ale wynik na symulatorze zawsze IS_IPHONE_5
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)
Odpowiedzi:
Szybki
Zobacz to w akcji https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346
Uwaga: Jeśli np. IPhone 6 jest w trybie powiększenia, interfejs użytkownika jest powiększoną wersją iPhone'a 5. Te funkcje nie określają typu urządzenia, ale tryb wyświetlania, więc iPhone 5 jest pożądanym wynikiem w tym przykładzie.
Cel C
Sposób użycia: http://pastie.org/9687735
Uwaga: Jeśli np. IPhone 6 jest w trybie powiększenia, interfejs użytkownika jest powiększoną wersją iPhone'a 5. Te funkcje nie określają typu urządzenia, ale tryb wyświetlania, więc iPhone 5 jest pożądanym wynikiem w tym przykładzie.
źródło
Dla Swift:
źródło
źródło
IS_IPHONE_6_IOS7
iIS_IPHONE_6P_IOS7
nie są potrzebne, iPhone 6 (+) może działać tylko na iOS 8 i nowszych.źródło
nativeBounds
jest lepszy w użyciu niżbounds
. IPhone 6 z włączonym powiększeniem wyświetlacza zgłosi 568 dla bounds.height, ale 1334 dla nativeBounds.height, mimo że powiększenie wyświetlacza nie ma żadnego wpływu na aplikacje. ( support.apple.com/en-us/HT203073 )Używam klasy, która pobiera aktualne informacje o systemie. Musisz tylko upewnić się, że wszystkie typy urządzeń są aktualne.
źródło
Mogę potwierdzić, że błąd zniknie po ustawieniu ekranu uruchamiania.
Zachowałem obrazy startowe i dodałem MainStoryboard do ekranu uruchamiania, a symulator poprawnie rozpoznał urządzenia.
źródło
Lepiej nie wiązać kodu z typami urządzeń. Doprowadzi to do sztywnego i zawiłego. Apple chce, żebyś myślał o rozmiarach, a nie o urządzeniach. Jeśli potrzebujesz specjalnych rozmiarów dla urządzeń większych niż iPhone 5, takich jak rozmiary obrazów lub czcionek, polecam utworzenie klasy normalizacji z mnożnikiem, który zwiększa rozmiar podstawowy o pewien procent w oparciu o relację między ekranem iPhone'a 5 szerokość i aktualny rozmiar urządzenia.
Więc w swoim kodzie zrobisz coś takiego:
źródło
static normalize
?Rozszerzenie UIDeivce ze składnią Swift 3+ .
Przykładowe użycie:
Oryginalna odpowiedź: https://stackoverflow.com/a/36479017/3659227
źródło
Zaktualizuj Xcode 11 / Swift 5.1:
Cześć, zaktualizowałem do Xcode10 / Swift 4.2 i nowe rozmiary dla iPhone XS / XSMAX / XR
z wykrywaniem telefonów Notch-IPhones.
Mam nadzieję, że to komuś pomoże.
}
źródło
Napotkałem problem podczas migracji z projektu iOS 7 do projektu iOS 8, ponieważ nie dodałem sceny ekranu uruchamiania do mojego projektu.
W tym przypadku rozmiar ekranu dla iPhone'a 6 i 6+ to iPhone 5.
Zobacz w dokumentacji Apple; Używasz uruchamiania XIB lub pliku scenorysu, aby wskazać, że Twoja aplikacja działa na telefonie iPhone 6 Plus lub iPhone 6.
źródło
źródło
Na plus trzeba też sprawdzić powiększenie
źródło
źródło