标签: modalviewcontroller

如何解除用presentModalViewController打开的视图控制器:

我提出了一个视图控制器presentModalViewController:,现在如何关闭/关闭它?

objective-c uiviewcontroller modalviewcontroller ios

17
推荐指数
3
解决办法
3万
查看次数

呈现模态视图控制器会隐藏导航栏

我有一个带导航栏的导航应用程序,但有一些实例,而不是将视图控制器推入堆栈,我需要以模态方式呈现视图控制器.问题是,当我关闭模态视图控制器时,除了导航栏被隐藏并且(父视图)已经调整大小之外,一切都按预期运行,这是根据文档的预期行为.所以我想我可以简单地调用内置方法取消隐藏导航栏.我已经尝试过了

[self.navigationController setNavigationBarHidden:NO];
Run Code Online (Sandbox Code Playgroud)

以及没有成功的动画版本.

文档在方法中讨论了这一点

presentModalViewController: animated:
Run Code Online (Sandbox Code Playgroud)

在讨论部分,它说,

在iPhone和iPod touch设备上,modalViewController的视图始终全屏显示"和"将modalViewController属性设置为指定的视图控制器.调整其视图大小并将其附加到视图层次结构."然而,文档并没有让我知道在解除模态视图后如何撤消此过程.

有没有其他人经历过这个并找到了解决方案?

编辑:我遇到了同样的问题,所以我没有问自己的问题,而是赞助了这个问题.这是我的具体情况:

在我的例子中,我通过导航控制器在模态视图控制器中呈现图像选择器:

-(void) chooseImage {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        imagepicker = [[UIImagePickerController alloc] init];
        imagepicker.allowsEditing = NO;
        imagepicker.delegate = self;
        imagepicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagepicker.navigationBar.opaque = true;
        imagepicker.wantsFullScreenLayout = NO;

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

            if (self.view.window != nil) {
                popoverController = [[UIPopoverController alloc] initWithContentViewController:imagepicker];

                [popoverController presentPopoverFromBarButtonItem:reset permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
            } else {}

        } else {
            [self.navigationController presentModalViewController:imagepicker animated:YES];   
        }
    }
}

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    if (UI_USER_INTERFACE_IDIOM() == …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c uinavigationbar modalviewcontroller ios

17
推荐指数
3
解决办法
3万
查看次数

UIViewController In-Call状态栏问题

问题:

在调用状态栏消失后,模态呈现的视图控制器不会向上移动,在顶部留下20px空/透明空间.


正常:没有问题

在此输入图像描述


在电话:没有问题

在此输入图像描述


在呼叫消失后:

在顶部留下20px高的空/透明空间,露出下面的橙色视图.但是,状态栏仍然存在于透明区域上方.导航栏还为状态栏留出空间,它的位置只有20px太低.

在此输入图像描述

在此输入图像描述


  • 基于iOS 10
  • 模态呈现的视图控制器
  • 自定义模态演示
  • 后面的主视图控制器是橙色
  • 不使用Autolayout
  • 当旋转到横向时,20px In-Call Bar离开并仍然留下20px的间隙.
  • 我选择退出在横向方向显示状态栏.(即大多数股票应用程序)

我试着听App代表:

willChangeStatusBarFrame
didChangeStatusBarFrame
Run Code Online (Sandbox Code Playgroud)

还可以查看基于控制器的通知:

UIApplicationWillChangeStatusBarFrame
UIApplicationDidChangeStatusBarFrame
Run Code Online (Sandbox Code Playgroud)

当我为所有上述四种方法记录呈现视图的帧时,帧始终位于(y:0)原点.


更新

查看控制器自定义模式演示

    let storyboard = UIStoryboard(name: "StoryBoard1", bundle: nil)
    self.modalVC = storyboard.instantiateViewController(withIdentifier: "My Modal View Controller") as? MyModalViewController
    self.modalVC!.transitioningDelegate = self
    self.modalVC.modalPresentationStyle = .custom
    self.modalVC.modalPresentationCapturesStatusBarAppearance = true;
    self.present(self.modalVC!, animated: true, completion: nil)


    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        let containerView = transitionContext.containerView
        let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)
        let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)
        toViewController!.view.transform = CGAffineTransform(scaleX: 0.001, …
Run Code Online (Sandbox Code Playgroud)

statusbar modalviewcontroller ios in-call swift

17
推荐指数
2
解决办法
7415
查看次数

如何用淡出动画解雇模态VC?

我在演示VC中使用以下代码来淡化子模态VC,这很好用:

self.infoViewController.view.alpha = 0.0;
[self.navigationController presentModalViewController:self.infoViewController animated:NO];
[UIView animateWithDuration:0.5
             animations:^{self.infoViewController.view.alpha = 1.0;}];
Run Code Online (Sandbox Code Playgroud)

但是我无法让它淡出,我尝试了一些东西,这是我尝试过的最新功能:

- (IBAction)dismissAction:(id)sender
{
if ([[self parentViewController] respondsToSelector:@selector(dismissModalViewControllerAnimated:)])
{
    [[self parentViewController] dismissModalViewControllerAnimated:YES];
    self.parentViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    self.parentViewController.view.alpha = 0.0;
    [UIView animateWithDuration:0.5
                     animations:^{self.parentViewController.view.alpha  = 1.0;}];
} else 
{
    [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
    self.presentedViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    self.presentedViewController.view.alpha = 0.0;
    [UIView animateWithDuration:0.5
                     animations:^{
                         self.presentedViewController.view.alpha  = 1.0;}];
}
Run Code Online (Sandbox Code Playgroud)

}

模态视图控制器淡出但立即消失,而不是像显示时那样.

animation fadeout dismiss modalviewcontroller ios

16
推荐指数
2
解决办法
3万
查看次数

在模态视图之后保持父视图的方向呈现不同的方向

所以我正在开发一个仅支持横向模式的iPad应用程序,除了在一个模态视图控制器上.我遇到的问题是,一旦我呈现模态视图并将方向更改为纵向然后关闭视图,父视图(应该只支持横向)处于纵向模式,直到我旋转设备然后返回到风景和保持这种方式.我一直在努力弄清楚如何让父母保持原始方向,但却未能找到解决方案.

我在我的app委托中有以下代码,只允许在单个模态视图(GalleryPhotoViewer)上进行方向更改:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
NSUInteger orientations = UIInterfaceOrientationMaskAllButUpsideDown;

    if(self.window.rootViewController){
        UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];

        //Support Portrait mode only on Photoviewer
        if ([[presentedViewController presentedViewController] isKindOfClass:GalleryPhotoViewController.class] ) {
            orientations = UIInterfaceOrientationMaskAll;
        }else{
            orientations = [presentedViewController supportedInterfaceOrientations];

        }
    }

    return orientations;
}
Run Code Online (Sandbox Code Playgroud)

从父类(PhotosViewController)我调用:

GalleryPhotoViewController *gpView = [GalleryPhotoViewController new];
[self presentViewController:gpView animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

在我的父(以及其他视图)中,我有以下代码禁止纵向模式:

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if(interfaceOrientation == UIInterfaceOrientationPortrait) {
       return YES;
    } else {
        return NO;
    }
}
Run Code Online (Sandbox Code Playgroud)

关于如何在我的父视图上保持方向的任何想法?一旦模态被解除,我在考虑可能只是以编程方式更改viewWillAppear方法中父级的方向,但后来我不知道之前的方向是什么,更不用说我无法找到代码来执行此操作不管是ios6.

编辑/解决方案:所以我找到了一个解决方案,我最终做的是离开应用程序:supportedInterfaceOrientationsForWindow:代码,只是将UINavigation子类添加到呈现模态视图的父视图中,并且所有内容都按预期工作,父级保留其原始在模态能够自由变化的同时取向. …

ipad uiinterfaceorientation modalviewcontroller ios ios6

16
推荐指数
1
解决办法
4730
查看次数

ShareKit模态视图控制器不会消失

我在Xcode 4.2(iOS SDK 5)上使用ShareKit 0.2.1在Twitter上分享文本.它共享很好,但模式视图控制器在单击取消按钮成功共享后不会消失(见下文):

在此输入图像描述

这是我的代码:

-(IBAction)shareOnTwitter:(id)sender{


    // Item to share
    NSString *text = @"Go away, modal view controller!";

    [SHKTwitter shareText:text];

}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

cocoa-touch objective-c uiviewcontroller modalviewcontroller sharekit

15
推荐指数
1
解决办法
2320
查看次数

ios5 - 带故事板的模态视图控制器的大小

  1. 有没有办法调整使用故事板segue以模态方式呈现的视图控制器?

  2. 如何通过翻转过渡从此模态视图控制器呈现另一个视图控制器?

如果我将其定义为Style = Modal,Presentation = Default,Transition = Flip Horizo​​ntal它看起来很奇怪(背景为白色).

谢谢!

storyboard uiviewcontroller modalviewcontroller ios ios5

15
推荐指数
2
解决办法
1万
查看次数

如何制作仅覆盖屏幕一半的模态日期选择器?

我希望与iPhone联系人应用程序中的生日日期设置器具有相同的效果.如何才能在屏幕中间显示模态日期选择器.

我希望日期选择器超过UITableView(就像在iphone联系人应用程序中).我希望UITableView能够在日期选择器后面自由滚动(就像在iphone联系人应用程序中一样).

提前致谢.

iphone uidatepicker uiviewcontroller modalviewcontroller

15
推荐指数
1
解决办法
2万
查看次数

如何使用iOS 7自定义过渡在顶部呈现半模式视图控制器

如何在主视图控制器的顶部显示"半视图"控制器?

要求: - 呈现第二个视图控制器,它在主视图控制器的顶部滑动. - 第二个视图控制器应仅显示主视图控制器的一半以上 - 主视图控制器应保持在第二个视图控制器后面可见(透明背景,下方未显示黑色) - 第二个视图控制器应使用类似于模态垂直覆盖的动画制作动画,或者iOS 7自定义转换 - 当第二个视图控制器处于活动状态时,用户仍然可以与主视图控制器上的按钮交互(即第二个视图控制器不覆盖整个主视图控制器)r - 第二个视图控制器有自己的复杂逻辑(不能简单视图) - 仅限故事板,Segues,iOS 7 - 仅限iPhone,而非iPad.

我尝试过使用模态视图控制器,但这不允许与主视图控制器交互.有人可以提供一个如何使用iOS7自定义转换或其他方法执行此操作的示例.

modalviewcontroller ios ios7 custom-transition

14
推荐指数
1
解决办法
1万
查看次数

隐藏在模态视图中的状态栏(通过全屏演示)

尝试从模态视图中隐藏状态栏.

已经检查了几种方法:

override func prefersStatusBarHidden() -> Bool {
    return true
}

with / without self.setNeedsStatusBarAppearanceUpdate()
Run Code Online (Sandbox Code Playgroud)

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade)
Run Code Online (Sandbox Code Playgroud)

但在iOS 9中折旧

这适用于全屏演示(模态segue演示选项),但在全屏幕上注意这是我的设置.

如果你有任何想法..

hidden statusbar modalviewcontroller ios

14
推荐指数
3
解决办法
1万
查看次数