转到 Tab Bar Controller Swift 中的另一个选项卡后如何保持 ViewController 的详细信息相同

Posted

技术标签:

【中文标题】转到 Tab Bar Controller Swift 中的另一个选项卡后如何保持 ViewController 的详细信息相同【英文标题】:How to keep ViewController details the same after going to another tab in Tab Bar Controller Swift 【发布时间】:2016-02-10 00:03:18 【问题描述】:

我的标签栏控制器有问题。在选项卡 1 上,我有一张地图。地图处于自动布局状态,大约占屏幕的一半。我可以选择使地图全屏显示。如果我要让地图全屏显示,转到选项卡 2 并返回选项卡 1,地图将回到其自动布局位置。在这种情况下,我需要它是全屏的。

关于如何克服这个问题的任何想法?

【问题讨论】:

我会使用 NSUserDefaults 来存储地图的大小,以便在视图即将出现时检索它 我实际上尝试在离开视图之前将地图大小存储在单例中。当我回来时,地图的大小会正确,但你会注意到地图有点小故障。所以我想避免这种情况。有什么想法吗? 【参考方案1】:

好的,所以我重新编写了您的案例,在尝试从 viewDidAppear 调用函数时,我可以看到故障部分。但是,当我将逻辑放在 viewDidLayoutSubviews 中时,它非常顺利。以下是我试过的代码:

@IBOutlet weak var map: MKMapView!

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()

    if (NSUserDefaults.standardUserDefaults().boolForKey("isMapFullScreen")) 
        self.map.frame = self.view.bounds;
    


@IBAction func buttonIsClicked(sender: AnyObject) 

    self.map.frame = self.view.bounds;
    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isMapFullScreen")

【讨论】:

谢谢你!像魅力一样工作。感谢您抽出宝贵时间提供帮助!【参考方案2】:

我要做的是使用以下方法保存用户首选项:

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isMapFullScreen")

然后在 ViewWillAppear 中,执行以下操作:

if (NSUserDefaults.standardUserDefaults().boolForKey("isMapFullScreen")) 
     // Put map on full screen

【讨论】:

我实际上尝试在离开视图之前将地图大小存储在单例中。当我回来时,地图的大小会正确,但你会注意到地图有点小故障。所以我想避免这种情况。有什么想法吗? 哦,我明白你的意思了。我现在不在我的 Mac 前,但我可以稍后尝试并回复你。 非常感谢!感谢您的帮助!

以上是关于转到 Tab Bar Controller Swift 中的另一个选项卡后如何保持 ViewController 的详细信息相同的主要内容,如果未能解决你的问题,请参考以下文章

iOS第八课——Navigation Controller和Tab bar Controller

Tab Bar Controller 不在所有 UIViewControllers 中

iOS 自定义tab bar 怎么隐藏

mui tab bar 底部导航栏跳转页面。不用pluseady 因为不支持

arm体系如何对SWI功能

使用 tabbarcontroller 代替 tab bar 和 tab bar item 的好处