gpt4 book ai didi

ios - 为什么 UITabBarController 向 viewWillTransitionToSize 中的隐藏 View 提供错误的大小?

转载 作者:行者123 更新时间:2023-12-01 18:56:05 25 4
gpt4 key购买 nike

在 iOS 8 中,我正在移动我的代码以依赖 viewWillTransitionToSize调整我在 UITabBarController 下的 viewControllers。但是,当当前未显示 View 时,传递给它的尺寸不正确。

我写了一个小程序来隔离问题。它只是简单地创建两个 VC,给它们贴上标签,把它们放在 TabBarController 中,然后将交付的大小报告给 viewWillTransitionToSize。如果要重新创建它,可以用以下代码替换虚拟项目 AppDelegate.m。

输出在程序下方。我做错了什么,还是有解决方法来获得正确的即将到来的尺寸?

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

@interface MyViewController : UIViewController

@property (strong, nonatomic) NSString * detailItem;

@end

@implementation MyViewController

- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
NSLog(@"%@ will transition from %@ to %@",self.detailItem, NSStringFromCGSize(self.view.frame.size), NSStringFromCGSize(size));
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

MyViewController * firstVC = [[MyViewController alloc] initWithNibName:nil bundle:nil];
firstVC.detailItem = @"Bookmark controller";
firstVC.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemBookmarks tag:0];

MyViewController *secondVC = [[MyViewController alloc] initWithNibName:nil bundle:nil];
secondVC.detailItem = @"History controller";
secondVC.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemHistory tag:1];

UITabBarController * tabBarController = [[UITabBarController alloc] initWithNibName:nil bundle:nil];
[tabBarController setViewControllers: @[firstVC, secondVC]];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];

return YES;
}


@end

输出如下:

<<starting in Bookmark VC in Portrait; transition to Landscape>>
Bookmark controller will transition from {375, 667} to {667, 375} <<Correct>>
History controller will transition from {375, 667} to {0, 0} <<Very wrong>>

<<transition back to Portrait>>
Bookmark controller will transition from {667, 375} to {375, 667} <<Correct>>
History controller will transition from {375, 667} to {667, 375} <<Wrong>>

<<switch to History tab; transition to Landscape>>
Bookmark controller will transition from {375, 667} to {375, 667} <<Wrong>>
History controller will transition from {375, 667} to {667, 375} <<Correct; note prev wrong size is now correct without notification>>

<<transition back to Portrait>>
Bookmark controller will transition from {375, 667} to {375, 667} <<Correct but still wrong current size>>
History controller will transition from {667, 375} to {375, 667} <<Correct>>

最佳答案

我尝试使用下面的代码解决此问题。我不确定这是否 100% 正确,所以如果有人有好的解决方案,请告诉我们。

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
for viewController in viewControllers! {
viewController.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}
}

关于ios - 为什么 UITabBarController 向 viewWillTransitionToSize 中的隐藏 View 提供错误的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com