亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有嵌入式導航控制器的Popover不考慮后導航的大小

帶有嵌入式導航控制器的Popover不考慮后導航的大小

iOS
莫回無 2019-11-25 10:51:03
我有一個托管UINavigationController的UIPopoverController,其中包含一個小的層次的視圖控制器。我遵循了文檔,并為每個視圖控制器設置了視圖的popover-context大小,如下所示:[self setContentSizeForViewInPopover:CGSizeMake(320, 500)];(每個控制器的大小不同)當我在層次結構中向前導航時,這可以按預期工作-彈出窗口會自動為尺寸更改設置動畫效果,以與推送的控制器相對應。但是,當我通過導航欄的“后退”按鈕在視圖堆棧中導航“后退”時,彈出窗口不會改變大小,它的大小與到達的最深視圖一樣大。這對我來說似乎很糟;我希望彈出窗口在通過視圖堆棧彈出時會尊重設置的大小。我想念什么嗎?
查看完整描述

3 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

這是我為iOS 7和8解決的方法:


在iOS 8中,iOS會將您在彈出窗口中所需的視圖無提示地包裝到presentingViewController視圖控制器的presentedViewController中。有一個2014年的WWDC視頻,解釋了popovercontroller的新功能。


無論如何,對于在導航控制器堆棧上顯示的視圖控制器,它們都希望自己調整大小,這些視圖控制器需要(在iOS 8下)調用此代碼來動態設置preferredContentSize:


self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable);

用您計算出的表或視圖高度替換heightOfTable。


為了避免大量重復代碼并創建常見的iOS 7和iOS 8解決方案,我在UITableViewController上創建了一個類別,以在tableviews中調用viewDidAppear時執行此工作:


- (void)viewDidAppear:(BOOL)animated 

{

    [super viewDidAppear:animated];

    [self setPopOverViewContentSize];

}

Category.h:


#import <UIKit/UIKit.h>


@interface UITableViewController (PreferredContentSize)


- (void) setPopOverViewContentSize;


@end

Category.m:


#import "Category.h"


@implementation UITableViewController (PreferredContentSize)


- (void) setPopOverViewContentSize

{

    [self.tableView layoutIfNeeded];

    int heightOfTable = [self.tableView contentSize].height;


    if (heightOfTable > 600)

        heightOfTable = 600;


    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0)

            self.preferredContentSize=CGSizeMake(320, heightOfTable);

        else

            self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable);

    }

}


@end


查看完整回答
反對 回復 2019-11-25
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

這是對krasnyk答案的改進。

您的解決方案很棒,但動畫效果不佳。

進行一些改進可以使動畫效果更好:


刪除- (void) forcePopoverSize方法中的最后一行:


- (void) forcePopoverSize {

    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;

    CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);

    self.contentSizeForViewInPopover = fakeMomentarySize;

}

將[self forcePopoverSize]放在- (void)viewWillAppear:(BOOL)animated方法中:


- (void)viewWillAppear:(BOOL)animated

{

    [super viewWillAppear:animated];


    [self forcePopoverSize];

}

最后-在- (void)viewDidAppear:(BOOL)animated方法中設置所需的大小:


- (void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];


    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;

    self.contentSizeForViewInPopover = currentSetSizeForPopover;

}

分享編輯


查看完整回答
反對 回復 2019-11-25
  • 3 回答
  • 0 關注
  • 567 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號