Tag: uinavigationcontroller

在UINavigationController中使用modalPresentationStyle = .FormSheet推送时,SFSafariViewController显示不正确

我有一个简单的设置表视图,这是UINavigationController的第一个视图。 我使用.FormSheet modalPresentationStyle提供设置UINavigationController,这意味着在iPhone上占用全屏幕,而在iPad上则以模态方式显示居中。 现在我想要设置表中的一行将SFSafariViewController推到导航堆栈上。 这在iPhone上工作正常,但在iPad上没有。 iPad截图: 请注意,SFSafariViewController导航栏的一部分显示在导航栏下方(使用“设置”后退button)。 请参阅图像中的红色矩形。 let urlText = "http://www.apple.com" let url = NSURL(string: urlText)! let safariViewController = SFSafariViewController(URL: url) self.navigationController?.pushViewController(safariViewController, animated: true) 在iPhone上,根本没有看到SFSafariViewController导航栏 – 这对我的用例来说是完美的。 任何魔术设置,使其正确工作?

在UINavigationController中支持纵向和横向视图的最佳实践

我search了高和低,我不知道我出来是处理这个问题的最好方法(虽然它似乎是唯一的一个)。 根据要使用多个笔尖为不同的iPhone界面方向,我实施了相关的方法,似乎一切工作正常。 不幸的是,我不得不处理一个UINavigationController,每个页面都必须支持纵向和横向模式,并在两种模式下重现相同的function。 这意味着,如果用户在某个时候决定从纵向切换到横向,整个应用程序应该允许他在所选的模式下来回浏览页面。 显然,缺less的文档是如何处理这个问题。 在我的看法中,我有一些附加的showChild方法来执行导航的button。 所有在纵向模式下都能正常工作(就我所知,这是默认模式)。 方法是这样的: – (IBAction)showChild:(UITapGestureRecognizer *)sender { UIView *view = [sender view]; PortraitViewController *nextPortraitViewcontroller = [[PortraitViewController alloc] initWithNibName:@"Portrait" bundle:nil]; [self.navigationController pushViewController:nextPortraitViewcontroller animated:YES]; } 但是,当涉及到景观模式,我得到了混合的结果。 在LandscapeViewController类中的showChild:方法是完全一样的,它从PortraitViewController开始build立一个视图,并将其推送到导航控制器。 这一切似乎都进展顺利,但是当我回到原来的位置时,显示的是前一个PortraitViewController,而不是风景,而且它的子视图都是分散的,而不是放在他们的位置。 现在的问题是:因为苹果公司似乎并不关心文档和最佳实践(这个机制是非常不理想的,我可以说这是来自人机交互devise和编程的背景),那么什么是correc – 苹果方式这样做?

在最新的Xcode版本中,不能在Swift中设置导航栏字体

以下代码在更新到Xcode 6.1之前运行正常,以适应iOS 8.1: override func viewDidAppear(animated: Bool) { self.navigationController?.navigationBar.topItem?.title = "Home" self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "Lobster 1.4", size: 34), NSForegroundColorAttributeName: UIColor.whiteColor()] } 问题是在NSFontAttributeName: UIFont(name: "Lobster 1.4", size: 34) 和我在这里得到的错误是: ! "Could not find an overload for 'init' that accepts the supplied arguments" 我发现这个原始代码在一个不同的StackOverflow问题,它是按预期工作,直到此更新(昨天下载)。 我的字体确实安装正确。 我现在应该以不同的方式编写这个代码,还是有一种全新的方式来设置我的导航栏字体? 谢谢!

在applicationWillEnterForeground之前更改视图

我想在后台一段时间后locking用户。 我正在AppDelegate的applicationWillEnterForeground捕捉这个(并比较存储在applicationWillResignActive时间)。 如果小于超时时间,则不执行任何操作。 如果超过超时时间,我会致电: [_navigationController popToRootViewControllerAnimated:NO]; 这使用户回到根视图。 一个视觉中断,它工作得很好。 之前的视图(用户在应用程序不活动时查看的内容)在popup到根目录之前显示得非常简短。 在testing中,似乎该视图会在调用applicationWillEnterForeground之前重新出现。 我唯一的想法就是在不活动的时候隐藏所有的东西,比如用填充的矩形模糊视图。 这听起来像一个肮脏的黑客,所以我觉得有一个更好的办法。 我也打开不同的方式来达到同样的最终结果。 谢谢!

navigationController.viewControllers在iOS 8.2中以不同的方式工作

在我的项目中,我正在使用一些代码来处理后退button,如下所示。 NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers]; if ([[VCs objectAtIndex:[VCs count] – 2] isKindOfClass:[LoginViewController class]]) { [VCs removeObjectAtIndex:[VCs count] – 2]; [VCs removeObjectAtIndex:[VCs count] – 2]; } [self.navigationController setViewControllers: VCs]; 在iOS 7中,我正在得到所需的结果。 但对于iOS版本8.2,可变数组VC中的值只是堆栈中的当前或topViewController。 但后退button将导航到所有以前的视图控制器。 但是他们都没有出现在导航堆栈中。ios8中的导航处理是否有任何改变? 我想从堆栈中删除login屏幕viewcontroller,以便点击后退button,它不会回到login屏幕。 我只在iOS 8.2中面对这个问题(可能在iOS 8和更高版本中)。 可能是什么问题? 编辑: 在prepareForSegue:中 ,我使用下面的代码: if([[segue identifier] isEqualToString:@"mediaDetailSegue1"]) { MovieDetailViewController *movieDetail; if(isIOS8SystemVersion) { movieDetail = ([[segue destinationViewController]viewControllers][0]); […]

UINavigationBar滑开,而不是留在原地

我创build了演示项目来显示问题。 我们在UINavigationController里有两个视图控制器。 MainViewController是根。 class MainViewController: UIViewController { lazy var button: UIButton = { let button = UIButton() button.setTitle("Detail", for: .normal) return button }() override func viewDidLoad() { super.viewDidLoad() navigationItem.title = "Main" view.backgroundColor = .blue view.addSubview(button) button.translatesAutoresizingMaskIntoConstraints = false button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true button.widthAnchor.constraint(equalToConstant: 150).isActive = true button.heightAnchor.constraint(equalToConstant: 42).isActive = true button.addTarget(self, […]

如何返回Objective-C中的前一个视图?

我是iOS编程的初学者,我想实现回到主视图的function。 我使用这个代码: -(IBAction)onclickhome:(id)sender { [self.navigationController popViewControllerAnimated:YES]; } 我已经使用导航控制器在主页button单击事件,但它不跳转到主屏幕。 你有什么build议和源代码适用于我的代码?

我如何使UIPopoverPresentationController调整导航popup?

我使用UIPopoverPresentationController在iOS应用程序中popup。 当一个popup窗口中的导航控制器推动一个新的视图控制器时,popup窗口调整到该视图控制器的preferredContentSize 。 但是,当导航控制器从视图控制器popup堆栈时,popup窗口不会调整为以前的大小。 我怎样才能做到这一点? 这个问题的可能重复,但为现代UIPopoverPresentationController 。 更新:看这里的例子代码说明问题。 克隆它,并在iPad模拟器中运行它。 点击popupbutton,你会得到一个导航控制器的popup窗口。 点击推杆button项目,你会得到一个新的更高的VC堆栈(大小在导航栏中)。 stream行,并没有调整回到原来的样子。

如何更改UIBarButtonItem的tintColor?

我想将我的右栏button项目的颜色从黑色更改为白色。 这是一个button作为search图标。 我还没有对search实现进行编码,因为我想先完成主界面。 我以为我写了正确的代码,所以它应该显示为白色,但在故事板和模拟器中似乎仍然显示为黑色。 在故事板中,我也把它设置为白色。 这是我的代码,位于AppDelegate.swift文件中: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Changing the status bar's colour to white UIApplication.sharedApplication().statusBarStyle = .LightContent // Changing the navigation controller's background colour UINavigationBar.appearance().barTintColor = UIColor(red: 0.0/255.0, green: 165.0/255.0, blue: 227.0/255.0, alpha: 1.0) // Changing the navigation controller's title colour UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()] […]

如何隐藏根视图中的导航控制器?

请帮助我在根视图中隐藏导航控制器。 我已经find了解决scheme在我需要的每个视图控制器中写[navigationController setNavigationBarHidden:YES] 。 那么,它的工作,但只有第一次:我运行的应用程序,在根视图我没有导航,然后我去第二个视图 – 导航出现,确定。 但后来我在导航控制器中按“返回”,从根视图导航并没有消失。 我和xib一起工作。