我的应用中有一个帐户页面,我希望在桌面视图的第一部分上方显示帐户信息,类似于设置中的Apple ID页面。
我的问题是基于如何构建视图,使得在个人资料图片上方没有显示分隔符。或者使信息显示在tableview内,但不在一个部分内。
从阅读中看,似乎不可能或很难让一些分隔符显示而其他分隔符不显示。
在苹果ID页面的情况下,该图片,名称和电子邮件是在其自己的部分中还是属于其下方部分的单元格?
以下图片是我最接近的图片,尽管顶部分隔符很难隐藏。
对问题的广泛性质表示道歉,但我认为目标很明确,一旦达成解决方案,我将使问题对未来的观众更具体。
感谢。
答案 0 :(得分:1)
试试这个
//这将隐藏所有行的分隔符
tableView.separatorStyle = UITableViewCellStyle.None
//对于自定义分隔符
if indexPath.row != 0{
var aView: UIView = UIView()
aView.frame = CGRect(x:0,y:44,width:300,height:1)
aView.backgroundColor = UIColor.redColor()
cell .addSubview(aView)
}
答案 1 :(得分:1)
您需要在custom view
中使用UITableViewCell
。
1。在UITableView
中将Separator
none
设为storyboard
。
2。创建一个自定义UITableViewCell
,其中包含UIView
。
class TableCell: UITableViewCell
{
@IBOutlet weak var separatorView: UIView!
}
3。根据您的要求在backgroundColor
中设置separatorView
的{{1}}。
示例:强>
cellForRowAt
<强>截图:强>
答案 2 :(得分:0)
感谢Dev和PGDev,我能够提出一个适用于static cells
的好解决方案。我为extension
制作了UITableViewCell
,看起来像这样。
let separatorColour = UIColor(red: 200/255, green: 200/255, blue: 200/255, alpha: 0.5)
extension UITableViewCell {
func separator(topInset: CGFloat, btmInset: CGFloat, showTop: Bool, showBtm: Bool) {
if showTop {
let topSeparator: UIView = UIView()
topSeparator.frame = CGRect(x: topInset, y: 0, width: frame.width, height: 0.5)
topSeparator.backgroundColor = separatorColour
addSubview(topSeparator)
}
if showBtm {
let btmSeparator: UIView = UIView()
btmSeparator.frame = CGRect(x: btmInset, y: frame.height - 0.5, width: frame.width, height: 0.5)
btmSeparator.backgroundColor = separatorColour
addSubview(btmSeparator)
}
}
func btnSeparator() {
let topSeparator: UIView = UIView()
topSeparator.frame = CGRect(x: 0, y: 0, width: frame.width, height: 0.5)
topSeparator.backgroundColor = separatorColour
addSubview(topSeparator)
let btmSeparator: UIView = UIView()
btmSeparator.frame = CGRect(x: 16, y: frame.height - 0.5, width: frame.width - 32, height: 0.5)
btmSeparator.backgroundColor = separatorColour
addSubview(btmSeparator)
}
}
在第一个函数separator()
中,您只需选择顶部和底部separator
的插图以及它们是否可见。
<强> TOPCELL 强>
因此,对于上面图片中显示cell
的{{1}},顶部和底部name label
都可见。但是因为它应该显示为该部分中的第一个separators
,所以它没有顶部插入和适当的底部插入。
<强> MiddleCell 强>
对于cell
与cell
的情况,只有email label
(带插入)可见,因为上面的separator
底部有cell
。< / p>
<强> BottomCell 强>
对于separator
cell
,password label
只有separator
(没有偏移)可见,因为上面的cell
底部有separator
。
<强> SpecialCase 强>
btnSeparator()
函数仅用于帮助和支持按钮的情况,我希望双方都插入。
现在要实现此extension
,我在switch statement
函数中使用cellForRowAt
为每个cell
提供了适当的extension
,这就是看起来的样子像:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = super.tableView(tableView, cellForRowAt: indexPath)
let inset: CGFloat = 16
switch indexPath {
// First Section
case [0,1]:
cell.separator(topInset: 0, btmInset: inset, showTop: true, showBtm: true)
case [0,2]:
cell.separator(topInset: inset, btmInset: inset, showTop: false, showBtm: true)
case [0,3]:
cell.separator(topInset: inset, btmInset: 0, showTop: false, showBtm: true)
// Second Section
case [1,0]:
cell.separator(topInset: 0, btmInset: inset, showTop: true, showBtm: true)
case [1,1]:
cell.separator(topInset: inset, btmInset: inset, showTop: false, showBtm: true)
case [1,2]:
cell.separator(topInset: inset, btmInset: 0, showTop: false, showBtm: true)
// Third Section
case [2,0]:
cell.btnSeparator()
case [2,1]:
cell.separator(topInset: inset, btmInset: 0, showTop: false, showBtm: true)
case [2,3]:
cell.separator(topInset: 0, btmInset: 0, showTop: true, showBtm: true)
default:
print("default")
}
return cell
}
务必在separator
中将Storyboard
设为无,或使用:
tableView.separatorStyle = UITableViewCellStyle.None