iPhone, iOS 8: как представить ViewController меньше, чем исходный контроллер представления?

У меня есть два контроллера представления, я хочу представить контроллер представления (VC) первого VC. Второй VC имеет меньший размер. Я хочу показать второй контроллер представления над первым. Как поповер. Вы можете представить это, если мы добавим еще один контроллер представления, который скользит снизу вверх, но останавливается на панели навигации.

Вот мой код:

@IBAction func showSecondVC(sender: AnyObject) {
            
    let secondViewController = storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController
    
    secondViewController.view.frame = CGRect(origin: CGPoint(x: view.frame.origin.x, y: header.frame.height), size: CGSize(width: view.frame.width, height: view.frame.height - header.frame.height))

    secondViewController.definesPresentationContext = true
    secondViewController.providesPresentationContextTransitionStyle = true
    
    secondViewController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext
           
    self.presentViewController(secondViewController, animated: true, completion:nil)


}

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

Редактировать

Я также хочу отметить, что я стараюсь делать это в портретной ориентации.


person Dima Deplov    schedule 02.03.2015    source источник
comment
Специально для этого я создал репозиторий Github BonsaiController.   -  person Warif Akhand Rishi    schedule 24.10.2018


Ответы (2)


Если вы попробуете это сделать на iPhone, встроенное корневое представление представленного контроллера представления будет всегда полноэкранным, поэтому ваши попытки изменить его размер не увенчаются успехом. (iPad это отдельная история)

Просто позвольте корневому каталогу выглядеть так, как он есть (т. е. не спорьте с тем, что он полноэкранный), но сделайте его фоновый цвет чистым цветом. Если вы хотите представить какое-то индивидуальное представление/контент/что бы это ни было... например, меньшее представление с некоторым предупреждением... или некоторыми параметрами. Просто добавьте его в качестве подвида корневого представления.

ОБНОВЛЕНИЕ: Как говорится в документации класса UIViewController:

«В горизонтально компактной среде представляемый вид всегда отображается в полноэкранном режиме».

Единственная комбинация, которую я могу представить, чтобы это работало, — это Iphone6 ​​+ в ландшафтном режиме, где класс горизонтального размера больше, чем компактный. Так что вам не повезло, потому что вы хотите портрет.

person Earl Grey    schedule 02.03.2015
comment
как я читал, это поведение доступно в iOS 8, прочитайте редактирование ответа @matt или комментарии stackoverflow.com/questions/7923927/ - person Dima Deplov; 03.03.2015
comment
ЭрлГрей, извини, я не понял твоего ответа. Полная фраза из документов: В горизонтально компактной среде представленный вид всегда является полноэкранным. В горизонтально регулярной среде представление зависит от значения в свойстве modalPresentationStyle, но что, если мы не будем говорить о размерах классов, я пока вообще не использую класс размеров, поэтому у меня есть Any width Any height. Я вижу здесь замечание о horizontally compact и horizontally regular, что насчет других случаев? - person Dima Deplov; 03.03.2015
comment
любой айфон в портретном режиме горизонтально компактен. В горизонтальном компакте применяется первое предложение. Классификация форм-факторов по размерным классам выбрана компанией Apple. У вас нет другого выбора, кроме как уважать его. - person Earl Grey; 03.03.2015
comment
Я вижу, что вы можете предложить в качестве альтернативы? - person Dima Deplov; 03.03.2015
comment
Смотрите мой 2-й абзац в моем ответе, это действительно простое и простое решение. - person Earl Grey; 03.03.2015

Чтобы добавить ответ Эрла Грея, после установки цвета фона ViewController на Clear. Создайте переход со следующими наборами свойств:

  • Вид для «Представить модально»
  • Презентация в "Поверх текущего контекста"
person Quinton Wall    schedule 13.11.2015