转到 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 中