我正在用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中完成大部分应用程序,并且希望能够为动态和静态表视图实现相同的结果。
我遇到的另一个问题是,当更改单元格框架时,我内部的标签未正确更新。这意味着其内容被截断。
任何帮助将不胜感激。
谢谢
这是我想做的事情:
答案 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
}
}
从故事板上打开或关闭阴影效果,并提供要查看的拐角半径。您可以给任何视图阴影或半径。