#ios #iphone #swift #uitableview
#iOS #iPhone #swift #uitableview
Вопрос:
У меня есть раздел UITableView
с заголовком высотой 10, и он должен backgroundColor
clearColor
просто показывать разделы более разделенными. Теперь мне нужно добавить тень только в нижней части каждого раздела. Я пытался добавить тень к viewForHeaderInSection
методу, но результат очень плохой. Какие-либо советы по достижению этого?
func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let shadowView = UIView()
shadowView.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).CGColor
shadowView.layer.shadowOffset = CGSizeMake(0.0, 2.0)
shadowView.layer.shadowOpacity = 1.0
shadowView.layer.shadowRadius = 0.0
shadowView.layer.masksToBounds = false
return shadowView
}
func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 2
}
Комментарии:
1. какой код вы пробовали?
2. Я отредактировал вопрос.
3. Вы можете использовать добавить вид изображения (вместе с теневым изображением), чтобы скрыть вид изображения для всех ячеек, оставляя последнюю ячейку. Это решит вашу проблему.
Ответ №1:
Я сделал эти два примера Swift 3. Сначала это классическая тень, я использовал CAGradientLayer. Во-вторых, это теневая дуга, я использовал UIBezierPath, CAShapeLayer и CAGradientLayer.
Классическая тень:
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let shadowView = UIView()
let gradient = CAGradientLayer()
gradient.frame.size = CGSize(width: myTab.bounds.width, height: 15)
let stopColor = UIColor.gray.cgColor
let startColor = UIColor.white.cgColor
gradient.colors = [stopColor,startColor]
gradient.locations = [0.0,0.8]
shadowView.layer.addSublayer(gradient)
return shadowView
}
Это результат:
Теневая дуга:
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let shadowView = UIView()
let path = UIBezierPath()
path.move(to: CGPoint.zero)
path.addLine(to: (CGPoint(x: (myTab.bounds.maxX), y: 0.0)))
path.addLine(to: (CGPoint(x: (myTab.bounds.maxX), y: 15)))
path.addCurve(to: (CGPoint(x: 0.0, y: 15)), controlPoint1: (CGPoint(x: (myTab.bounds.midX), y: -10)), controlPoint2: (CGPoint(x: 0.0, y: 15)))
path.addLine(to: CGPoint.zero)
let shape = CAShapeLayer()
shape.path = path.cgPath
let gradient = CAGradientLayer()
gradient.frame.size = CGSize(width: myTab.bounds.width, height: 15)
let stopColor = UIColor.gray.cgColor
let startColor = UIColor.white.cgColor
gradient.colors = [stopColor,startColor]
gradient.locations = [0.0,0.9]
gradient.mask = shape
shadowView.backgroundColor = UIColor.white
shadowView.layer.addSublayer(gradient)
return shadowView
}
Это результат:
Комментарии:
1. Это то, что мне было нужно. Первый подход хорош. Если вы реализуете тот, который указан в вопросе, он добавит вид нижнего колонтитула, а затем под ним появится тень.