iOS-часть viewcontroller становится черной при изменении ориентации - PullRequest
0 голосов
/ 07 ноября 2019

Когда я меняю ориентацию viewcontroller во время его загрузки в определенной ориентации, часть экрана становится пустой внизу.

Шаги для воспроизведения:

  1. Иметь представление таблицы (думаю, не обязательно. Может быть любым представлением) в контроллере представления
  2. Вставить новый контроллер представления, который также имеет представление таблицы (думаю, не обязательно. Это может быть любое представление) во время действия
  3. Поверните экран из одной ориентации в другую (Портрет в альбомной или альбомной в портрет). Теперь вы сможете увидеть темную часть.
  4. Нажмите кнопку «Назад», чтобы открыть текущий контроллер вида.
  5. Теперь поверните из одной ориентации в другую (Портрет в пейзаж или в пейзаж в портрет). Теперь вы сможете увидеть и темную часть здесь. .

Нижняя часть viewcontroller становится черной.

Я могу воспроизвести 7 из 10 раз.

К вашему сведению:

Мой Viewcontroller имеет только табличное представление, и все ячейки имеют ограничения на автоматическое расположение. Пытаясь понять, почему это произошло, и я хотел бы исправить это.

Подробнее о воспроизведении проблемы:

По сути, вы можете воспроизвести эту проблему, только еслиустройство находится в наклонном положении и либо выдвигает, либо выдвигает контроллер представления, и в то время как страница пытается загрузить, вы должны изменить ориентацию, и тогда возникнет проблема.

(Pun предназначен .... lol) Другими словами, вы должны наклонить свое устройство, как будто вы управляете колесом:).

Эта проблема может возникнуть, только если вы используете свое устройство как рулевое колесо:)

Ответы [ 4 ]

2 голосов
/ 15 ноября 2019

Попробуйте сбросить макет TableView после поворота, используя этот метод,

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

или

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        tableView.layoutIfNeeded()
    }
2 голосов
/ 12 ноября 2019

Снова установить кадр в

viewDidLayoutSubviews

2 голосов
/ 14 ноября 2019

В вашем вызове метода viewWillTransition layoutIfNeeded ()

1 голос
/ 11 ноября 2019

Я также столкнулся с той же проблемой.

У моего контроллера представления был только один вид таблицы, и когда мы наклоняемся, я имею в виду изменение ориентации во время навигационного толчка или всплывающего сообщения, которое раньше происходило.

Попробуйте установить кадр в 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, 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, 0, width, height);
    }
}

К вашему сведению:

, еслиустановка фрейма self.tableView.frame = CGRectMake(0, 0, width, height); не работает, тогда вы можете попробовать [self.tableView layoutIfNeeded]

...