2016-12-29 5 views
1

У меня есть ViewController, и когда пользователь щелкает его в нижней части, то другие ViewController всплывают с помощью segue Present Modally. Можно ли предоставить им нестандартный размер? Я попробовал предоставить контентный размер на Use Preferred Explicit Size, но это не помогло. Я хочу, чтобы VC всплыл и взял 70% от текущего VC.Как установить нестандартный размер для представления Modally ViewController

+0

Вы пытаетесь на iPhone или IPad? –

+0

iPhone только на данный момент. – Nitesh

+0

Вы можете проверить это http://stackoverflow.com/questions/25811199/ios-8-change-the-size-of-presented-modal-view-controller –

ответ

0

решаемые его с помощью UIContainerView вместо "Present модально" Segue.

Вот как я это сделал, если кто-то еще борется с той же проблемой.

НЕ УСТАНАВЛИВАЙТЕ ЛЮБОЙ СЕГЕ/ВЕДУЩИЙ В VC B/W UIContainerView. Добавьте идентификатор STORYBOARD.

@IBOutlet weak var containerView: UIView! 
weak var currentViewController: UIViewController? 

override func viewDidLoad() { 

    self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "ContainerVC") 
    self.currentViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
    self.addChildViewController(self.currentViewController!) 
    self.addSubview(subView: self.currentViewController!.view, toView: self.containerView) 

    super.viewDidLoad() 

} 
//MARK:- CONTAINER VIEW 

func addSubview(subView:UIView, toView parentView:UIView) { 
    parentView.addSubview(subView) 

    var viewBindingsDict = [String: AnyObject]() 
    viewBindingsDict["subView"] = subView 
    parentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[subView]|", 
                      options: [], metrics: nil, views: viewBindingsDict)) 
    parentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[subView]|", 
                      options: [], metrics: nil, views: viewBindingsDict)) 
} 

func cycleFromViewController(oldViewController: UIViewController, toViewController newViewController: UIViewController) { 
    oldViewController.willMove(toParentViewController: nil) 
    self.addChildViewController(newViewController) 
    self.addSubview(subView: newViewController.view, toView:self.containerView!) 
    newViewController.view.alpha = 0 
    newViewController.view.layoutIfNeeded() 
    UIView.animate(withDuration: 0.5, animations: { 
     newViewController.view.alpha = 1 
     oldViewController.view.alpha = 0 
    }, 
           completion: { finished in 
           oldViewController.view.removeFromSuperview() 
           oldViewController.removeFromParentViewController() 
           newViewController.didMove(toParentViewController: self) 
    }) 
} 

ТОГДА, КОГДА ВЫ ХОТИТЕ ИЗМЕНИТЬ ВИД СОГЛАСНО ДЕЙСТВИЯ

let newViewController : DestinationVC = self.storyboard?.instantiateViewController(withIdentifier: "DestinationVC") as! DestinationVC 
    newViewController.data = dataToBeSentViaSegue // Passing DATA 
    newViewController.view.translatesAutoresizingMaskIntoConstraints = false 
    self.cycleFromViewController(oldViewController: self.currentViewController!, toViewController: newViewController) 
    self.currentViewController = newViewController 
2

Посмотрите на это и дайте мне знать, если вы хотите получить какие-либо разъяснения.

__weak IBOutlet UIView *conViewers; 

- (void)callingOfCustomView:(UIViewController *)showPushedVC 
{ 

    [showPushedVC.view setTranslatesAutoresizingMaskIntoConstraints:YES]; 
    showPushedVC.view.frame = conViewers.bounds; 
    //**>> Add child view into container view 
    [conViewers addSubview: showPushedVC.view]; 
    [self addChildViewController: showPushedVC]; 
    [showPushedVC didMoveToParentViewController:self]; 
} 

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; 

    ViewersVC *objViewers = [storyboard instantiateViewControllerWithIdentifier:@"ViewersVC"]; 

    [self callingOfCustomView:objViewers]; 

Обновите это быстро.

0

Вы должны добавить вид 70% размера на второй VC (я имею в виду, который вы представляете), и установить цвет фона, который VC's view в clear color так, что для оставшихся 30% будет отображаться предыдущий VC.

Например высота вашего VC составляет 100 точек, то добавьте еще view с высотой 70 pixel и установить clear background color к self.view Я имею в виду основного вида ОК!

Теперь установите modalPresentationStyle в свой ВК, прежде чем представить его, как,

yourVC.modalPresentationStyle = UIModalPresentationOverCurrentContext; 

    [self presentViewController:yourVC animated:YES completion:^{ 


    }]; 

Если вы даете поддержку меньшее, чем ios 8 то вам необходимо установить setModalPresentationStyle в NavigationController(If you are using else parent view controller - which are presenting view controller) как,

 [self.navigationController setModalPresentationStyle:UIModalPresentationCurrentContext]; 

    [self presentViewController:yourVC animated:YES completion:^{ 


    }]; 

Swift:

yourVC.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext 

    self.presentViewController(yourVC, animated: true) { 

    } 

или

self.navigationController?.modalPresentationStyle = UIModalPresentationStyle.CurrentContext 

    self.presentViewController(yourVC, animated: true) { 

    } 
+0

Но мне нужны действия, которые будут выполняться в кнопках, которые будут ниже 30% от просмотра. И в зависимости от выбора кнопки изменяется мое содержание. – Nitesh

+0

Также получена эта ошибка с помощью этой причины: «Приложение попыталось представить модально активный контроллер» – Nitesh

+0

Если вы хотите обрабатывать действия из этой части, тогда вы должны пойти с «ContainerView», или вы можете добавить такой же интерфейс в текущий вид, чтобы что каждый может почувствовать, что это предыдущий! – Lion

Смежные вопросы