我正在UITableViewDelegate的tableView(_:viewForHeaderInSection:)内定义分段控件。由于我使用的是UITableView.Style.plain,因此当表格滚动时,带有分段控件的标题将保持固定位置。

我想创建一些上下文,以便未选择的分段控件的背景模糊正在其后滚动的表。这是ios 13分段控件的外观:
ios - 如何模糊分段控件的背景?-LMLPHP

有没有一种方法可以模糊分段控件未选择的分段的背景?

我可以创建这样的分段控件

let items = ["First", "Second"]
let customSC = UISegmentedControl(items: items)
customSC.selectedSegmentIndex = 0

我可以用这个https://stackoverflow.com/a/25706250/784637创建一个模糊
let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
//always fill the view
blurEffectView.frame = self.view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

但是我不知道如何将所有东西融合在一起

最佳答案

这是一种可能的方法...这个想法是将模糊效果视图放在某些包装器视图中的分段控件后面,并将该视图提供为表的标题。

这是演示(仅使用我的一些设置就可以看到,但是这些都是可配置的),当然gif对此不是很好,但是可见模糊效果有效。

方法演示代码:

class HeaderView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)

        let blurEffect = UIBlurEffect(style: .dark) // .light looks better as for me, so used in demo
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.translatesAutoresizingMaskIntoConstraints = false

        let items = ["First", "Second"]
        let customSC = UISegmentedControl(items: items)
        customSC.selectedSegmentIndex = 0
        customSC.translatesAutoresizingMaskIntoConstraints = false

        self.addSubview(customSC)
        customSC.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        customSC.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        customSC.widthAnchor.constraint(equalToConstant: 200).isActive = true
        customSC.heightAnchor.constraint(equalToConstant: 60).isActive = true

        self.insertSubview(blurEffectView, belowSubview: customSC)
        blurEffectView.leadingAnchor.constraint(equalTo: customSC.leadingAnchor).isActive = true
        blurEffectView.trailingAnchor.constraint(equalTo: customSC.trailingAnchor).isActive = true
        blurEffectView.topAnchor.constraint(equalTo: customSC.topAnchor).isActive = true
        blurEffectView.bottomAnchor.constraint(equalTo: customSC.bottomAnchor).isActive = true
        blurEffectView.layer.cornerRadius = 8
        blurEffectView.layer.masksToBounds = true
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

关于ios - 如何模糊分段控件的背景?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59834816/

10-12 06:19