[cocoa-touch] iOS에서 화면 너비와 높이를 얻는 방법은 무엇입니까?

iOS에서 화면의 크기를 어떻게 알 수 있습니까?

현재는 다음을 사용합니다.

lCurrentWidth = self.view.frame.size.width;
lCurrentHeight = self.view.frame.size.height;

에서 viewWillAppear:willAnimateRotationToInterfaceOrientation:duration:

처음으로 전체 화면 크기를 얻습니다. 두 번째로 화면에서 탐색 모음을 뺀 것입니다.



답변

iOS에서 화면의 크기를 어떻게 알 수 있습니까?

게시 한 코드의 문제는 화면의 크기와 일치하도록 뷰 크기를 계산하고 있다는 것을 항상 알 수는 있습니다. 화면 크기가 필요한 경우 다음과 같이 화면 자체를 나타내는 개체를 확인해야합니다.

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

분할보기 업데이트 : 의견에서 Dmitry는 다음과 같이 물었습니다.

분할보기에서 화면 크기를 어떻게 얻을 수 있습니까?

위에 제공된 코드는 분할 화면 모드에서도 화면 크기를보고합니다. 분할 화면 모드를 사용하면 앱의 창이 변경됩니다. 위의 코드가 예상 한 정보를 제공하지 않으면 OP와 마찬가지로 잘못된 객체를보고 있습니다. 이 경우에는 다음과 같이 화면 대신 창을 봐야합니다.

CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;

스위프트 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 mainScreen]에는 상태 표시 줄도 포함되어 있습니다. 응용 프로그램 (상태 표시 줄 제외)의 프레임을 검색하려면 사용해야합니다.

+ (CGFloat) window_height   {
    return [UIScreen mainScreen].applicationFrame.size.height;
}

+ (CGFloat) window_width   {
    return [UIScreen mainScreen].applicationFrame.size.width;
}


답변

위의 Objective-C 답변 중 일부를 Swift 코드로 번역했습니다. 각 번역은 원래 답변에 대한 참조로 진행됩니다.

주요 답변

let screen = UIScreen.main.bounds
let screenWidth = screen.size.width
let screenHeight = screen.size.height

간단한 함수 답변

func windowHeight() -> CGFloat {
    return UIScreen.mainScreen().applicationFrame.size.height
}

func windowWidth() -> CGFloat {
    return UIScreen.mainScreen().applicationFrame.size.width
}

장치 방향 답변

var screenHeight : CGFloat
let statusBarOrientation = UIApplication.sharedApplication().statusBarOrientation
// it is important to do this after presentModalViewController:animated:
if (statusBarOrientation != UIInterfaceOrientation.Portrait
    && statusBarOrientation != UIInterfaceOrientation.PortraitUpsideDown){
    screenHeight = UIScreen.mainScreen().applicationFrame.size.width
} else {
    screenHeight = UIScreen.mainScreen().applicationFrame.size.height
}

로그 답변

let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
println("width: \(screenWidth)")
println("height: \(screenHeight)")


답변

나는 이러한 편의 방법을 전에 사용했다 :

- (CGRect)getScreenFrameForCurrentOrientation {
    return [self getScreenFrameForOrientation:[UIApplication sharedApplication].statusBarOrientation];
}

- (CGRect)getScreenFrameForOrientation:(UIInterfaceOrientation)orientation {

    CGRect fullScreenRect = [[UIScreen mainScreen] bounds];

    // implicitly in Portrait orientation.
    if (UIInterfaceOrientationIsLandscape(orientation)) {
      CGRect temp = CGRectZero;
      temp.size.width = fullScreenRect.size.height;
      temp.size.height = fullScreenRect.size.width;
      fullScreenRect = temp;
    }

    if (![[UIApplication sharedApplication] statusBarHidden]) {
      CGFloat statusBarHeight = 20; // Needs a better solution, FYI statusBarFrame reports wrong in some cases..
      fullScreenRect.size.height -= statusBarHeight;
    }

    return fullScreenRect;
} 


답변

나는 이것이 오래된 게시물이라는 것을 알고 있지만 때로는 이러한 상수를 #define하는 것이 유용하므로 걱정할 필요가 없습니다.

#define DEVICE_SIZE [[[[UIApplication sharedApplication] keyWindow] rootViewController].view convertRect:[[UIScreen mainScreen] bounds] fromView:nil].size

위의 상수는 장치 방향에 관계없이 올바른 크기를 반환해야합니다. 그런 다음 치수를 얻는 것은 다음과 같이 간단합니다.

lCurrentWidth = DEVICE_SIZE.width;
lCurrentHeight = DEVICE_SIZE.height;


답변

기기 크기 파악 하고 방향을 고려하는 것은 매우 쉽습니다 .

// 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];


답변

우리는 장치의 방향도 고려해야합니다.

CGFloat screenHeight;
// it is important to do this after presentModalViewController:animated:
if ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortrait || [[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortraitUpsideDown){
    screenHeight = [UIScreen mainScreen].applicationFrame.size.height;
}
else{
    screenHeight = [UIScreen mainScreen].applicationFrame.size.width;
}