【问题标题】:SplitViewController Button overlapSplitViewController 按钮重叠
【发布时间】:2018-02-23 06:12:19
【问题描述】:

我有一个带有 MasterViewController 和 DetailViewController 的 UISplitViewController。

在我的 MasterViewController 中,我添加了一个分配了目标操作的按钮,并且效果很好……但是:

我希望我的按钮位于 MasterViewController 和 DetailViewController 之间的边界上。 但是按钮的一半根本消失了。我已经在层等中尝试过 zPosition 。但它没有用。

有人可以帮我吗?

【问题讨论】:

    标签: swift z-index uisplitviewcontroller layer zposition


    【解决方案1】:

    你的意思是: 分界线顶部的按钮将主视图和详细视图分开吗?

    然后,您可以直接从任何 Master 或 Detail 控制器向窗口添加按钮。 (虽然我不确定这是否是最佳做法。)

    这里你需要考虑三件事:

    1. 当您从 viewDidLayoutSubviews() 添加按钮时,这将起作用。它不能从 viewDidLoad() 或 viewWillAppear() 工作。

    2. 由于按钮是从 viewDidLayoutSubviews() 添加的,因此可能会多次调用此方法,并多次创建按钮并导致较早的按钮实例泄漏。因此,您可能会考虑为按钮创建一个类实例,以加深您对应用程序的设计。

    3. 在设备旋转时作用于按钮的位置(或状态)。


    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        /// Have a precise logic to centre it 
        let rect = CGRect(x: 270, y: 200, width: 100, height: 30)
        let button = UIButton(frame: rect)
        button.setTitle("Test Button", for: .normal)
        button.backgroundColor = UIColor.red
        button.addTarget(self, action: #selector(MasterViewController.testButtonTapped(sender:)), for: .touchUpInside)
    
        let window = self.view.window
        window?.addSubview(button)
        window?.bringSubview(toFront: button)
    }
    
    func testButtonTapped(sender: UIButton)   {
        debugPrint("Test button tapped")
    }
    

    【讨论】:

    • 嘿,谢谢,按预期工作,但是:在“testButtonTapped”中,我执行“pushViewController”,在下一个视图控制器中出现相同的按钮..这怎么可能?
    • 该按钮已添加到窗口中,因此它将在整个生命周期中都存在。请根据您的需要更新您的逻辑以相应地处理按钮。
    • 好的,谢谢您的回答:) 还有一件事,当我回到 masterviewcontroller 时,按钮的约束消失了……为什么?我该如何解决?
    • 你在哪里设置了约束?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多