如何在该部分存在时更改该部分的标题标签文本对齐方式
Posted
技术标签:
【中文标题】如何在该部分存在时更改该部分的标题标签文本对齐方式【英文标题】:How to change the Title label text alignment of the section when it was present 【发布时间】:2017-09-08 10:37:19 【问题描述】:我正在加载包含两个部分的UITableView
,并且我使用viewForHeaderInSection
方法为每个部分设置标题。最初我将title label
文本对齐设置为.left
。现在,当我滚动表格视图并出现第二部分时,我想将title label
文本对齐更改为.center
。当我向下滚动表格视图时,我想显示为初始状态(如第二部分文本对齐为.left
)。我该怎么做?
这是我用来加载该部分的TableView Delegate
方法。
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
let headerLabel:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 20))
headerLabel.textColor = UIColor.white
headerLabel.textAlignment = .left
headerLabel.font = Fonts.kFontWith_14
if section == 0
headerLabel.text = NSLocalizedString("Suggested", comment: "")
headerLabel.backgroundColor = Colors.kAppBgColor
headerLabel.textAlignment = .left
else
headerLabel.text = NSLocalizedString("Contacts", comment: "")
headerLabel.backgroundColor = Colors.kLightBlueColor
headerLabel.textAlignment = .left
headerLabel.sizeToFit()
return headerLabel
【问题讨论】:
你的问题不清楚。对于第 0 节中心对齐和其余部分左对齐?并删除headerLabel.sizeToFit()
否则对齐将不起作用
我想要的是最初加载表格时我想在左侧显示所有节标题。当我滚动表格视图并将呈现的部分标题作为中心时。我希望你能理解。@Bilal
【参考方案1】:
在全局上取一个bool
变量,当滚动发生时,以下委托将响应您
var isDirection = Bool()
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
if velocity.y > 0
print("up")
isDirection = true
if velocity.y < 0
print("down")
isDirection = false
Then write a condition in respective `tableview` delegate
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
let headerLabel:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 20))
headerLabel.textColor = UIColor.white
headerLabel.textAlignment = .left
headerLabel.font = Fonts.kFontWith_14
if section == 0
headerLabel.text = NSLocalizedString("Suggested", comment: "")
headerLabel.backgroundColor = Colors.kAppBgColor
else
headerLabel.text = NSLocalizedString("Contacts", comment: "")
headerLabel.backgroundColor = Colors.kLightBlueColor
if isDirection
headerLabel.textAlignment = .left
else
headerLabel.textAlignment = .center
return headerLabel
删除
headerLabel.sizeToFit()
这是示例,您可以根据滚动方向启用bool
变量。如果委托未调用,请在 scrollViewWillEndDragging
上重新加载您的表
【讨论】:
好的。我会试试这个。 您的解决方案部分为我工作。感谢您的回答。【参考方案2】:这是解决我的问题的方法
全局取一个布尔值和一个CGPoint
,并将UITableView.ContentOffset
值分配给viewDidload
方法中的defaultOffset
。
var isScroll:Bool = Bool()
var defaultOffSet = CGPoint()
override func viewDidLoad()
super.viewDidLoad()
defaultOffSet = tableView.contentOffset
我已经使用了这个scrollView
委托方法
func scrollViewDidScroll(_ scrollView: UIScrollView)
if contactsTableView.rectForHeader(inSection: 1).origin.y > contactsTableView.contentOffset.y-defaultOffSet.y
isScrolled = false
else if tableView.rectForHeader(inSection: 0).origin.y <= tableView.contentOffset.y-defaultOffSet.y
isScrolled = true
tableView.reloadData()
在我的桌面视图中viewForHeaderInSection
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
let headerLabel:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 20))
headerLabel.textColor = UIColor.white
headerLabel.textAlignment = .left
headerLabel.font = Fonts.kFontWith_14
if section == 0
headerLabel.text = NSLocalizedString("Suggested", comment: "")
headerLabel.backgroundColor = Colors.kAppBgColor
headerLabel.textAlignment = .left
else
headerLabel.text = NSLocalizedString("Contacts", comment: "")
headerLabel.backgroundColor = Colors.kLightBlueColor
if isScrolled
headerLabel.textAlignment = .center
headerLabel.backgroundColor = Colors.kAppBgColor
【讨论】:
以上是关于如何在该部分存在时更改该部分的标题标签文本对齐方式的主要内容,如果未能解决你的问题,请参考以下文章