ios - 如何让 subview Controller 在横向呈现时理解其框架?

标签 ios cocoa-touch uiview uiviewcontroller ios7

我正在使用以下代码从父 View Controller 呈现 subview Controller :

self.childVC = [[ChildVC alloc] init];
[self addChildViewController:self.childVC];
self.childVC.view.frame = self.view.bounds;
self.childVC.alpha = 0.1;
[self.view addSubview:self.childVC.view];
[UIView
    animateWithDuration:0.3
    delay:0.0
    options:UIViewAnimationOptionCurveEaseInOut
    animations:^(void) {
        self.view.alpha = 1.0;
    }
    completion:^(BOOL finished) {
        [self.childVC didMoveToParentViewController:self];
    }
];

父 View Controller 支持所有方向。当 parent 在 中时出现 child 时肖像 方向, child 的框架如预期:
viewDidLoad:   <UIView: 0xeb9f70; frame = (0 0; 320 568); autoresize = W+H;
viewDidAppear: <UIView: 0xeb9f70; frame = (0 0; 320 568); autoresize = W+H;

但是,当 parent 在 中时出现 child 时景观 方位, child 的框架很奇怪:
viewDidLoad:   <UIView: 0xeb9f70; frame = (0 0; 320 568); autoresize = W+H;
viewDidAppear: <UIView: 0xeb9f70; frame = (0 0; 568 320); autoresize = W+H;

在 viewDidLoad 中, child 认为它的框架是纵向的。然后它在 viewDidAppear 中进行自我纠正。这种帧的零星变化使 child 的动画看起来很烦躁。当 child 以横向启动时,如何使框架既正确又一致?

最佳答案

viewDidLoad当所有元素都已加载时,表示处于原始状态的 View 。布局尚未开始。如果您的 View Controller 是在 Storyboard 或 Nib 中定义的,则它将具有从解码器中读取的值。你不应该从那里开始你的动画,而是在 viewWillAppear ,应该在 View 布局后调用( viewDidLayout )。

关于ios - 如何让 subview Controller 在横向呈现时理解其框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579082/

相关文章:

ios - UITableViewCell设置突出显示:(BOOL)highlighted is always false

ios - UITableView contentSize 太大了 10pt(仅限 iOS 10!)

iphone - 如何从 SQLite 中正确读取和打印重音字符?

swift - UIView 阴影在 iphone 5s 中不显示

ios - iOS Objective C 中的单例不会阻止多个实例

带有加载指示器的 iOS 11 黑屏

iphone - 现有应用程序的更新

ios - 在后台下载期间未调用我的 NSURLSessionDelegate 方法

ios - UIViewController 存在

ios - xib 通知解除分配错误中的自定义 UIView