【问题标题】:Ios Swift programatically change view order over storyboardIos Swift 以编程方式更改情节提要上的视图顺序
【发布时间】:2016-12-04 08:25:45
【问题描述】:

我在故事板中添加了一个 textView 和一个 imageView,如下面的屏幕截图所示。

故事板顺序为:

  • textView
  • imageView

现在运行 imageView 覆盖 textView 并且分配给 textView 的东西不起作用。

所以我想以编程方式将顺序更改为:

  • imageView
  • textView

(不涉及情节提要)

我试过了:

self.view.bringSubviewToFront(textView)

self.view.sendSubviewToBack(imageView)

imageView.layer.zPosition = 1
textView.layer.zPosition = 2

这些都不适合我

【问题讨论】:

  • 您是否尝试过隐藏 imageView 以检查 textView 是否在正确的位置?
  • 是的,它在正确的地方,我已经尝试了所有这些。如果我更改情节提要中的顺序,它可以工作,但不能以编程方式进行。
  • 您可以指定在哪里使用您的代码? self.view.bringSubviewToFront(textView) self.view.sendSubviewToBack(imageView)
  • @ReinierMelian 无论代码在哪里执行,都必须将 textView 放在前面,对吧?
  • 对,但也许当你的代码被执行时,这个视图不存在@MohsenShakiba

标签: ios swift xcode uiview storyboard


【解决方案1】:

我猜问题是你可能在viewDidLoad 方法中使用了这些代码。尝试在viewDidAppear中使用

或者另一个尝试是使用performSelector

写在viewDidLoadviewWillAppear

self.performSelector(#selector(changeOrder), withObject: nil, afterDelay: 0.2)

并在此函数中写入您的订单更改

func changeOrder() {
   imageView.layer.zPosition = 1
   textView.layer.zPosition = 2
}

编辑

我做了一个样品。看看吧。
https://github.com/RajanMaheshwari/OrderingLayer

我已经尝试过代码及其工作正常

class ViewController: UIViewController {

@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myTextField: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()

    self.performSelector(#selector(changeOrder), withObject: nil, afterDelay: 0.2)
}

    func changeOrder() {

        myImageView.layer.zPosition = 1
        myTextField.layer.zPosition = 2
    }
}

我的故事板

运行代码后我的最终结果

现在imageView 位于第 1 层,textField 位于第 2 层位置

如果您注释掉 performSelector 行,那么结果将是

这里imageView 位于第 2 层位置,textField 位于第 1 层位置。

【讨论】:

  • viewDidLoad 或 viewWillAppear 与此代码的 viewDidLoad 没有任何不同
  • @MohsenShakiba 你可以试试viewDidAppear。 Point 不是做也不会出现,point 是运行时动态调用的执行选择器
  • @MohsenShakiba 查看更多详情。stackoverflow.com/questions/7445337/… 这对我有用。
  • @MohsenShakiba 查看示例并阅读有关performSelector 的更多信息。我已经提到了github链接
  • 再一次,它与加载或出现无关。这是关于使用 performSelector 进行动态运行时调用
猜你喜欢
  • 2017-10-18
  • 1970-01-01
  • 2012-05-11
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2012-02-12
相关资源
最近更新 更多