如何创建带有边距,圆角和阴影的UITableView?

时间:2018-08-21 09:44:49

标签: ios swift uitableview shadow margins

我正在用Swift开发一个应用程序。 在我的情节提要中,我有一个UITableViewController。我想在表格上应用左右边距,以及在第一个/最后一个单元格上的圆角和整个表格视图的阴影。

我尝试了很多选择,但是找不到合适的解决方案。现在,我正在使用UITableViewCell的子类,在其中我重写了框架以使其更窄。我可以有圆角,但不能有阴影。

这是我的sublcass代码:

class NarrowTableCell: UITableViewCell {

  override var frame: CGRect {
      get {
          return super.frame
      }
      set (newFrame) {
          var f = newFrame
          f.origin.x = 10
          if let w = superview?.frame.size.width {
              f.size.width = w - 20
          } else {
              f.size.width = newFrame.size.width - 20
          }
          super.frame = f
          super.layer.masksToBounds = true
      }
  }

  func applyNoCorners() {
      round(corners: [.topLeft, .topRight, .bottomLeft, .bottomRight], radius: 0)
  }

  func applyCorners() {
      round(corners: [.topLeft, .topRight, .bottomLeft, .bottomRight], radius: 5)
  }

  func applyTopCorners() {
      round(corners: [.topLeft, .topRight], radius: 5)
  }

  func applyBottomCorners() {
      round(corners: [ .bottomLeft, .bottomRight], radius: 5)
  }
}

我正在Storyboard中完成大部分应用程序,并且希望能够为动态和静态表视图实现相同的结果。

我遇到的另一个问题是,当更改单元格框架时,我内部的标签未正确更新。这意味着其内容被截断。

任何帮助将不胜感激。

谢谢

这是我想做的事情:

UITableView

1 个答案:

答案 0 :(得分:1)

  

希望这对您有帮助   我已经使用UIView的扩展来管理圆角和阴影。由于变量是@IBInspectable,因此可以直接在情节提要中设置所有内容!

import UIKit

extension UIView {

    @IBInspectable var shadow: Bool {
        get {
            return layer.shadowOpacity > 0.0
        }
        set {
            if newValue == true {
                self.addShadow()
            }
        }
    }

    @IBInspectable var cornerRadius: CGFloat {
        get {
            return self.layer.cornerRadius
        }
        set {
            self.layer.cornerRadius = newValue

            // Don't touch the masksToBound property if a shadow is needed in addition to the cornerRadius
            if shadow == false {
                self.layer.masksToBounds = true
            }
        }
    }


    func addShadow(shadowColor: CGColor = UIColor.black.cgColor,
               shadowOffset: CGSize = CGSize(width: 1.0, height: 2.0),
               shadowOpacity: Float = 0.4,
               shadowRadius: CGFloat = 3.0) {
        layer.shadowColor = shadowColor
        layer.shadowOffset = shadowOffset
        layer.shadowOpacity = shadowOpacity
        layer.shadowRadius = shadowRadius
    }
}

从故事板上打开或关闭阴影效果,并提供要查看的拐角半径。您可以给任何视图阴影或半径。