问题描述
我有一套 uitableviewcell 。 我想为以下条件应用边框颜色 为 firstcell 应用顶部边框颜色 最后一个单元格的底部边框颜色。
我是 swift 的新手,所以我不确定这是否可行。
解决方法
这是可以做到的。你要做的是,
- 创建一个自定义的
UITableView
单元格,将其设置为您想要的样式。 - 样式后添加 2 个
UIView
,高度为1
或您想要的任何高度。出于演示目的,让我们将它们命名为topSeparator
和bottomSeparator
。 - 将其中一个标题限制在自定义 tableview 单元格
ContentView
的顶部,将另一个标题限制在底部。 - 假设您使用
Storyboards
,将topSeparator
和bottomSeparator
连接到您的自定义单元格, -
disable
和topSeparator
之后的bottomSeparator
或init(frame:)
方法取决于您是要以编程方式还是使用 {{ 1}}。 - 在cell类中添加如下2个方法
awakeFromNib()
- 在要显示单元格的视图控制器中,添加一个标志以显示基于单元格的
Nibs
的分隔符。见下文
// Unhides top s
func showTopSeparator() {
self.topSeparator.isHidden = false
}
// Unhides bottom separator
func showBottomSeparator() {
self.bottomSeparator.isHidden = false
}
,
添加 Extension
。
您可以将下面的代码添加到您的 ViewController
文件中,也可以像我一样创建一个单独的文件。
CALayer+Extension.swift
import UIKit
extension CALayer {
func addBorder(edge: UIRectEdge,color: UIColor,thickness: CGFloat) {
let border = CALayer();
switch edge {
case UIRectEdge.top:
border.frame = CGRect(x: 0,y: 0,width: self.frame.width,height: thickness)
break
case UIRectEdge.bottom:
border.frame = CGRect(x:0,y:self.frame.height - thickness,width:self.frame.width,height:thickness)
break
case UIRectEdge.left:
border.frame = CGRect(x:0,y:0,width: thickness,height: self.frame.height)
break
case UIRectEdge.right:
border.frame = CGRect(x:self.frame.width - thickness,height:self.frame.height)
break
default:
break
}
border.backgroundColor = color.cgColor;
self.addSublayer(border)
}
}
TableViewController.swift
import UIKit
class TableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let arr = ["a","b","c","d"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.tableFooterView = UIView(frame: .zero)
}
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return arr.count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as? TableViewCell else { return UITableViewCell() }
cell.label.text = arr[indexPath.row]
//Setting the border
if indexPath.row == 0 { //first cell
cell.layer.addBorder(edge: .top,color: .blue,thickness: 0.5)
}
if indexPath.row == arr.count - 1 { //last cell
cell.layer.addBorder(edge: .bottom,thickness: 0.5)
}
return cell
}
}
如果要删除除第一个和最后一个单元格之外的边框,可以将此属性更改为 none
。