【问题标题】:Image as background for every view图像作为每个视图的背景
【发布时间】:2015-09-08 11:07:13
【问题描述】:

首先,我很惊讶在这里或 Google 上都找不到这个问题。似乎其他人也可能需要此功能。所以如果它毕竟是重复的,对不起,我搜索了高低。

我的故事板中有一个具有以下结构的应用程序:

-> 根标签栏控制器 -> (对于每个标签)SplitView Controller -> Navigation Controller -> TableView Controller -> Detail View Controller

我想设置一个在整个应用程序中都相同的背景图像。 我的想法是在我的 App Delegate 中为 Root Tab 控制器设置该图像:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool

方法。 :

var imageView = UIImageView(frame: self.window!.frame)
    var image = UIImage(named: "bg.png")!
    imageView.image = image

    self.window!.rootViewController!.view.backgroundColor = UIColor.clearColor()
    self.window!.rootViewController!.view.addSubview(imageView)
    self.window!.rootViewController!.view.sendSubviewToBack(imageView)

首先是设置它的好地方吗?

如果我有最后一行代码,我现在遇到的问题:

self.window!.rootViewController!.view.sendSubviewToBack(imageView)

我看不到图片。 (对于我的 UITableView 和 UITableViewCells 我将 opaque 设置为 false 并将 BackGroundColor 设置为 ClearColor)

如果我删除最后一行,图像就在那里,但在所有内容之上,我看不到任何内容(没有标签栏,没有拆分视图......)

请帮助我解决此问题或提供更好的方法。 TIA

【问题讨论】:

  • 问题是您不知道选项卡、拆分和导航控制器将哪些其他视图添加到层​​次结构中。您可能需要达到导航控制器级别
  • 这意味着两件事:我需要为每个导航控制器实现这个(atm 有 2 个,但是当我添加一个选项卡时,我将再次需要这样做)。我通过创建自定义类 NavControllerWithBackground 解决了这个问题,并且正在使用该类。在 ViewDidLoad 我添加了 var imageView... 代码。但问题仍然(几乎)相同:最后一行图像不可见,没有最后一行图像位于所有内容之上(标签栏除外)。
  • 我的目的是创建一个 UIViewController 子类,在其中设置背景图像并让你的所有控制器都继承自它。
  • @Bisca:这对于 iPad 上的 UISplitViewControllers 来说并不好,因为 TableViewController(主)和 DetailViewController 都会有那个图像。我想要整个屏幕的 1 张图片

标签: ios image swift background


【解决方案1】:

可能最简单的方法是: 将您的图像设置为 colorWithPatternImage 为您的 UITabBarController 的 backgroundColor,如下所示:

[tabbarController.view setBackgroundColor:UIColor colorWithPatternImage:yourImage];

然后确保将其所有视图控制器的视图的backgroundColor 设置为clearColor

【讨论】:

    【解决方案2】:

    MarkHim 的建议是解决方案的基础。但是它并没有完全起作用,我不得不添加一些东西来让 ik 看起来不错。对于其他想要实现相同目标的人,这是我必须做的:

    子类化我的 UITabBarController 和 UINavigationController 并实现一个 ViewDidLoad 设置它的背景为 clearColor :

    导入 UIKit

    class TMSplitViewController : UISplitViewController {
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.clearColor()
    }
    

    }

    这(以及在 IB 中我能想到的任何地方都将 backgroundColor 设置为 clearColor 解决了大部分问题。

    然而,从 masterView 转到 detailView 时,iPhone 上出现了一个问题:动画效果不佳,存在伪影。动画之后看起来还不错。我发现解决这个问题并不是一个好方法,所以我通过将以下代码添加到我的 DetailViewController 来修复它:

    if self.view.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.Compact {
            var imageView = UIImageView(frame: self.view.frame)
            var image = UIImage(named: "bg.png")!
            imageView.image = image
            self.view.addSubview(imageView)
            self.view.sendSubviewToBack(imageView)
        } else {
            self.view.backgroundColor = UIColor.clearColor()
        }
    

    所以对于所有水平紧凑布局(所有 iPhone,除了 iPhone 6+ 横向)我们加载背景图像,对于其他我们设置透明度。

    现在一切正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 2017-03-31
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多