第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何獲得與方向相關(guān)的屏幕高度和寬度?

如何獲得與方向相關(guān)的屏幕高度和寬度?

iOS
斯蒂芬大帝 2019-11-22 15:18:16
我正在嘗試以編程方式確定應(yīng)用程序的當(dāng)前高度和寬度。我用這個(gè):CGRect screenRect = [[UIScreen mainScreen] bounds];但這將產(chǎn)生320的寬度和480的高度,而不管設(shè)備是縱向還是橫向。如何確定主屏幕的當(dāng)前寬度和高度(即取決于設(shè)備方向)?
查看完整描述

3 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

在iOS 8+中,您應(yīng)該使用以下viewWillTransitionToSize:withTransitionCoordinator方法:


-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {

    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];


    // You can store size in an instance variable for later

    currentSize = size;


    // This is basically an animation block

    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {


        // Get the new orientation if you want

        UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];


        // Adjust your views

        [self.myView setFrame:CGRectMake(0, 0, size.width, size.height)];


    } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {

        // Anything else you need to do at the end

    }];

}

這將替換不推薦使用的動(dòng)畫(huà)方法,該方法不提供有關(guān)大小的信息:


-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration


查看完整回答
反對(duì) 回復(fù) 2019-11-22
?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以使用類似方法UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation)來(lái)確定方向,然后相應(yīng)地使用尺寸。


但是,在方向更改期間(如UIViewController的


- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 

                                 duration:(NSTimeInterval)duration

使用傳入的方向,toInterfaceOrientation因?yàn)閁IApplication的statusBarOrientation仍會(huì)指向舊的方向,因?yàn)樗形锤模ㄒ驗(yàn)槟挥趙ill事件處理程序中)。


摘要


有幾個(gè)與此相關(guān)的帖子,但是似乎每個(gè)帖子都表明您必須:


看一下[[UIScreen mainScreen] bounds]尺寸

檢查您所處的方向,然后

考慮狀態(tài)欄的高度(如果顯示)

鏈接


iPhone:獲取當(dāng)前視圖尺寸或屏幕尺寸

iPhone / iPad:如何以編程方式獲取屏幕寬度?

目標(biāo)C-如何獲得當(dāng)前的屏幕分辨率?

在iPhone或iPad中重新定向后,“框架” /窗口大小“不正確”

iPhone Dev SDK-獲取屏幕寬度

工作守則


我通常不會(huì)走那么遠(yuǎn),但是您激起了我的興趣。以下代碼可以解決問(wèn)題。我在UIApplication上寫(xiě)了一個(gè)Category。我添加了類方法來(lái)獲取currentSize或給定方向的大小,這就是您在UIViewController中調(diào)用的方法willRotateToInterfaceOrientation:duration:。


@interface UIApplication (AppDimensions)

+(CGSize) currentSize;

+(CGSize) sizeInOrientation:(UIInterfaceOrientation)orientation;

@end


@implementation UIApplication (AppDimensions)


+(CGSize) currentSize

{

    return [UIApplication sizeInOrientation:[UIApplication sharedApplication].statusBarOrientation];

}


+(CGSize) sizeInOrientation:(UIInterfaceOrientation)orientation

{

    CGSize size = [UIScreen mainScreen].bounds.size;

    UIApplication *application = [UIApplication sharedApplication];

    if (UIInterfaceOrientationIsLandscape(orientation))

    {

        size = CGSizeMake(size.height, size.width);

    }

    if (application.statusBarHidden == NO)

    {

        size.height -= MIN(application.statusBarFrame.size.width, application.statusBarFrame.size.height);

    }

    return size;

}


@end

要使用代碼簡(jiǎn)單調(diào)用[UIApplication currentSize]。另外,我運(yùn)行了上面的代碼,因此我知道它可以工作并向各個(gè)方向報(bào)告正確的響應(yīng)。請(qǐng)注意,我考慮了狀態(tài)欄。有趣的是,我必須減去狀態(tài)欄的高度和寬度的最小值。


希望這可以幫助。:D


其他想法


您可以通過(guò)查看UIWindow的rootViewController屬性來(lái)獲取尺寸。我過(guò)去已經(jīng)看過(guò)它,并且類似地在縱向和橫向上報(bào)告了相同的尺寸,只是報(bào)告了具有旋轉(zhuǎn)變換:


(gdb) po [[[[[UIApplication sharedApplication] keyWindow] rootViewController]視圖]


<UILayoutContainerView:0xf7296f0; 幀=(0 0; 320480); 變換= [0,-1,1,0,0,0]; 自動(dòng)調(diào)整大小= W + H; 層= <CALayer:0xf729b80 >>


(gdb) po [[[[[UIApplication sharedApplication] keyWindow] rootViewController]視圖]


<UILayoutContainerView:0xf7296f0; 幀=(0 0; 320480); 自動(dòng)調(diào)整大小= W + H; 層= <CALayer:0xf729b80 >>


不確定應(yīng)用程序的工作方式,但是如果您不使用某種導(dǎo)航控制器,則可以在主視圖下有一個(gè)具有最大父級(jí)高度/寬度的UIView并隨父級(jí)增大/縮小。然后,您可以這樣做:[[[[[[[UIApplication sharedApplication] keyWindow] rootViewController] view] subviews] objectAtIndex:0] frame]。一方面看起來(lái)很激烈,但是您明白了。


但是...最好在摘要下執(zhí)行上述三個(gè)步驟。開(kāi)始弄亂UIWindows,您會(huì)發(fā)現(xiàn)奇怪的東西,例如顯示UIAlertView將更改UIApplication的鍵窗口以指向由UIAlertView創(chuàng)建的新UIWindow。誰(shuí)知道?我發(fā)現(xiàn)了一個(gè)依賴keyWindow的錯(cuò)誤并發(fā)現(xiàn)它像那樣改變后才做了!


查看完整回答
反對(duì) 回復(fù) 2019-11-22
  • 3 回答
  • 0 關(guān)注
  • 580 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)