【问题标题】:Dismiss UIView border drawn as CGRect around CALayer.frame关闭在 CALayer.frame 周围绘制为 CGRect 的 UIView 边框
【发布时间】:2018-07-05 23:57:46
【问题描述】:

我正在为这样的视图添加边框:

extension UIView {
  func addTopBorderWithColor(color: UIColor, width: CGFloat) {
    let border = CALayer()
    border.backgroundColor = color.cgColor
    border.frame = CGRect(x:0,y: 0, width:self.frame.size.width, height:width)
    self.layer.addSublayer(border)
  }
}

在 viewDidLoad 中:

textLbl.addTopBorderWithColor(color: UIColor.white, width: 1)

在视图中将出现:

textLbl.text = "placeholder text \(variableLengthText)"

如何消除使用上述扩展程序绘制的边框?

【问题讨论】:

    标签: swift uiview calayer cgrect


    【解决方案1】:

    在其他视图(例如工具栏)中,作为一种草率的技巧,我只会在边框上写上与对象的背景颜色匹配的边框,这样它就不会重叠(例如在屏幕方向更改时)

    好吧,那总是错的,所以首先要做的就是停止这样做。

    这与viewDidDisappearviewWillAppear 无关。视图正在改变大小的信号是它的layoutSubviews 被调用。所以你可以实现layoutSubviews 来移除边框层并以新的尺寸添加一个新的层。

    但是最好给标签添加一个子视图,由一个清晰的背景组成,除了边框。这样,子视图可以使用约束来配置,以便与标签自动一起增长和缩小,而无需任何代码。这是演示该实现的截屏视频;红线是右边框:

    【讨论】:

    • 我知道这总是错误的,我的主要问题是如何访问该对象。我不是在要求最佳实践,但请随时继续分享;)
    • 我在你的问题中没有看到“主要问题”,我什至不知道“访问对象”是什么意思。
    • "关闭在 CALayer.frame 周围绘制为 CGRect 的 UIView 边框"
    • 我在问如何删除矩形,但我想我应该问如何删除图层
    • 使用我上面的例子,如何访问边框层?
    【解决方案2】:

    虽然@matt 的故事板解决方案看起来很优雅,但我无法实现它。但是,我确实通过在扩展中设置 layer.name 字段并在 ViewWillLayoutSubviews 中检查它来使其工作

    extension UIView {
      func addTopBorderWithColor(color: UIColor, width: CGFloat) {
        let border = CALayer()
        border.backgroundColor = color.cgColor
        border.frame = CGRect(x:0,y: 0, width:self.frame.size.width, height:width)
        border.name = "topBorder"
        self.layer.addSublayer(border)
      }
    

    ViewWillLayoutSubviews我打电话:

        if self.textLbl.layer.sublayers != nil {
      for layer in textLbl.layer.sublayers! {
        if layer.name == "rightBorder" || layer.name == "leftBorder" || layer.name == "topBorder" {
          layer.removeFromSuperlayer()
        }
      }
    }
    

    ViewDidLayoutSubviews我打电话:

    textLbl.addTopBorderWithColor(color: UIColor.white, width: 1.5)
    

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      相关资源
      最近更新 更多