如何在该部分存在时更改该部分的标题标签文本对齐方式

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

            
        
    


【讨论】:

以上是关于如何在该部分存在时更改该部分的标题标签文本对齐方式的主要内容,如果未能解决你的问题,请参考以下文章

TableView 部分更改标题对齐方式

单击div时如何更改多条文本的悬停颜色?

在使用视图 iOS 滚动 uilabel 时保持标签文本与屏幕中心对齐?

不同部分的集合视图标题中的重叠文本

Swift Eureka 隐藏更改部分

如何动态设置uibutton的标签颜色和对齐方式