方向更改时,viewcontroller的iOS部分会变黑

当我在加载特定方向的视图控制器时更改其方向时,屏幕的一部分在底部变为空白。

复制步骤:

  1. 在视图控制器中具有tableview(我认为不是必需的。可以是任何视图)
  2. 在过程中推一个新的viewcontroller,它也有一个tableview(我认为没有必要。可以是任何视图) 动作
  3. 将屏幕从一个方向旋转到另一个方向(从纵向到横向或从横向到纵向)。现在您将能够看到较暗的部分。
  4. 按下后退按钮以弹出当前的视图控制器
  5. 现在可以从一个方向旋转到另一个方向(从纵向到横向或从横向到纵向)。现在您也可以在这里看到较暗的部分。

viewcontroller的底部变黑。

我能够重现10次中的7次。

仅供参考:

我的Viewcontroller只有全部的表视图,并且所有单元格都具有自动布局约束。 试图了解它发生的原因,我想修复它。

有关重现此问题的更多详细信息:

基本上,只有将设备保持在倾斜位置并推或弹出视图控制器,并且在页面尝试加载时,您必须更改方向才能发生此问题。

(双关语意。...大声笑) 换句话说,您必须像在操纵方向盘一样倾斜设备:)。

仅当您像方向盘一样使用设备时,才会发生此问题:)

snailtoto 回答:方向更改时,viewcontroller的iOS部分会变黑

在您的viewWillTransition方法中,调用layoutIfNeeded()

,

尝试使用此方法在旋转后重置TableView的布局,

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        tableView.layoutIfNeeded()
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        tableView.layoutIfNeeded()
    }
,

我也遇到了同样的问题。

我的视图控制器只有一个表视图,当我们倾斜时,我的意思是在导航推动或弹出期间更改方向曾经发生过。

尝试设置框架  在viewDidLayoutSubviews

   -(void)viewDidLayoutSubviews{
    CGRect screen = [[UIScreen mainScreen] bounds];
    CGFloat width = CGRectGetWidth(screen);
    CGFloat height = CGRectGetHeight(screen);
    CGRect frame = self.tableView.frame;
    // To check if there's any mismatch between the sizes of screen and tableview then set the tableview frame same as screen frame.
    if (CGRectGetHeight(frame) != height && CGRectGetWidth(frame) != width) {
        self.tableView.frame = CGRectMake(0,width,height);
    }
}

或尝试在viewWillTransitionToSize

中设置框架
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
    CGRect screen = [[UIScreen mainScreen] bounds];
    CGFloat width = CGRectGetWidth(screen);
    CGFloat height = CGRectGetHeight(screen);
    CGRect frame = self.tableView.frame;
    if (CGRectGetHeight(frame) != height && CGRectGetWidth(frame) != width) {
        self.tableView.frame = CGRectMake(0,height);
    }
}

仅供参考:

如果设置框架self.tableView.frame = CGRectMake(0,height);不起作用,则可以尝试[self.tableView layoutIfNeeded]

,

再次在

中设置框架
  

viewDidLayoutSubviews

,

在一个视图控制器中(将其推入新视图控制器的父级)在 viewDidLayoutSubviews 上设置框架解决了在另一个视图控制器(在子视图控制器中,被推入的那个)设置框架的问题在 viewWillTransition 处解决了该问题:)但是我仍然不知道为什么没有针对该问题的通用解决方案。

本文链接:https://www.f2er.com/3146138.html

大家都在问