【问题标题】:Swift - UIView moves when changing tab controller tabsSwift - UIView 在更改选项卡控制器选项卡时移动
【发布时间】:2021-10-06 08:06:28
【问题描述】:

viewDidAppear 里面我有一个包含这段代码的函数,为了制作一个UIView

let contentView = UIView()
    func addSleepingView() {
        
        contentView.backgroundColor = .systemYellow.withAlphaComponent(0.25)
        
        view.addSubview(contentView)
        
        contentView.translatesAutoresizingMaskIntoConstraints = false
        contentView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        contentView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        
        // Anchor your view right above the tabBar
        contentView.bottomAnchor.constraint(equalTo: (tabBarController?.tabBar.topAnchor)!).isActive = true
        contentView.heightAnchor.constraint(equalToConstant: 50).isActive = true
        
        let label = UILabel()
        label.text = "Test"
        label.frame = CGRect(x: 0, y: 0, width: 25, height: 34.0)
        label.lineBreakMode = .byWordWrapping
        label.numberOfLines = 0
        label.textAlignment = .center
        label.translatesAutoresizingMaskIntoConstraints = false
        contentView.addSubview(label)
        label.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
        label.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
        
        let button = UIButton()
        button.setImage(UIImage(systemName: "arrow.clockwise", withConfiguration: UIImage.SymbolConfiguration(scale: .large)), for: UIControl.State.normal)
        button.tintColor = .systemGray
        button.frame = CGRect(x: self.view.bounds.width-42, y: 8, width: 34, height: 34.0)
        button.isUserInteractionEnabled = true
        button.addTarget(self, action: #selector(wakeupFunction), for: .touchUpInside)
        contentView.addSubview(button)
        let button2 = UIButton()
        button2.setImage(UIImage(systemName: "exclamationmark.triangle", withConfiguration: UIImage.SymbolConfiguration(scale: .large)), for: UIControl.State.normal)
        button2.tintColor = .label
        button2.frame = CGRect(x: 8, y: 8, width: 34, height: 34.0)
        button2.isUserInteractionEnabled = false
        contentView.addSubview(button2)
        
        contentView.bringSubviewToFront(button)
    }

这就是它的样子:

现在这正是我想要的。当我更改标签时,问题就来了。例如,转到最后一个选项卡,然后再次返回第一个选项卡。然后它看起来像这样:

我在这里做错了什么?

【问题讨论】:

    标签: ios swift uiview uitabbarcontroller


    【解决方案1】:

    您可以在 DispatchQueue.main 块中添加激活约束的代码

    您可以更改更新的线路,它将开始按您的预期工作。

    // 将视图锚定在 tabBar 的正上方

    DispatchQueue.main.async 
    {
    
            self.contentView.bottomAnchor.constraint(equalTo: (self.tabBarController?.tabBar.topAnchor)!).isActive = true
            self.contentView.heightAnchor.constraint(equalToConstant: 50).isActive = true
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多