【问题标题】:Tableview - Title overlapping Detail (Swift)Tableview - 标题重叠细节(Swift)
【发布时间】:2018-04-17 17:19:37
【问题描述】:

附上的图片说明了一切。有什么方法可以防止标题重叠,例如在达到其限制时自动移动到第二行?以编程方式/通过界面生成器。

P.S:我正在从 firebase 数据库中检索名称。这是一个投票页面,标题是展位名称

TableView 控制器

import UIKit
import FirebaseDatabase

var pitchData = [String]()
var myIndex = 0
class PitchTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.setNavigationBarHidden(false, animated: true)

        self.navigationController?.navigationBar.titleTextAttributes = [ NSAttributedStringKey.font: UIFont(name: "Gotham Rounded", size: 19)!]
        ref = Database.database().reference() //set the firebase reference
        // Retrieve the post and listen for changes
        databaseHandle = ref?.child("Afternoon13").queryOrdered(byChild: "BoothPosition").observe(.value, with: { (snapshot) in
            pitchData.removeAll()

            for child in snapshot.children {
                let snap = child as! DataSnapshot
                let key = snap.key


                pitchData.append(key)

            }
            self.tableView.reloadData()
        })
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return pitchData.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.font = UIFont(name: "Gotham Rounded", size: 20)
        cell.detailTextLabel?.font = UIFont(name: "Gotham Rounded", size: 20)
        cell.textLabel?.text = pitchData[indexPath.row]

        switch (pitchData[indexPath.row]) {
        case "ARC - attract, retain and cultivate":
            let returnValue: Int = UserDefaults.standard.integer(forKey: "voting")
            if (returnValue == 1)
            {
                cell.detailTextLabel?.text = "Completed ✓"
                cell.detailTextLabel?.textColor = UIColor.green
                cell.isUserInteractionEnabled = false
            }
            else {
                cell.detailTextLabel?.text = "Vote ᐳ"
                cell.detailTextLabel?.textColor = UIColor.blue
            }
        case "Anytime RCs":
            let returnValue: Int = UserDefaults.standard.integer(forKey: "voting1")
            if (returnValue == 1)
            {
                cell.detailTextLabel?.text = "Completed ✓"
                cell.detailTextLabel?.textColor = UIColor.green
                cell.isUserInteractionEnabled = false
            }
            else {
                cell.detailTextLabel?.text = "Vote ᐳ"
                cell.detailTextLabel?.textColor = UIColor.blue
            }

【问题讨论】:

  • 在tableview中你已经获取了label或者textfield。?
  • 您是如何通过情节提要或通过 xib 构建此视图的?
  • 哦,对不起,让我添加我的代码
  • cells/tableview 是动态的,所以一切都通过 xib/controller 完成

标签: ios swift xcode uitableview


【解决方案1】:

由于您使用默认 UITableViewCelltextLabel,这应该可以解决所有问题:

cell.textLabel.numberOfLines = 0;
cell.textLabel.lineBreakMode = .byWordWrapping;  

【讨论】:

  • 我是否也必须将此应用于详细文本标签?
  • 如果您还想要多行作为详细文本标签,那么 yes
  • 如果是这样,问题仍然存在。我的文本标签没有换行
  • 现在怎么样了?
  • 我可以看看你的 heightForRowAtIndexPath 吗?
【解决方案2】:

让我们用代码试试

// in view did load:
self.tableView.rowHeight = UITableViewAutomaticDimension

// cell row at indexpath
let reuseIdentifier = "cell"
        var cell:UITableViewCell? =
            tableView.dequeueReusableCell(withIdentifier: reuseIdentifier)
        if (cell == nil)
        {
            cell = UITableViewCell(style: .value1,
                                   reuseIdentifier: reuseIdentifier)
        }

        // your customize font, color... here

        cell!.textLabel?.numberOfLines = 0;
        cell!.detailTextLabel?.numberOfLines = 0;

        return cell!

【讨论】:

    【解决方案3】:

    确保三件事:-

    • 标题标签对单元格内容视图具有底部、顶部和前导约束,以及带有投票> 的水平间距,并且投票> 按钮具有所有约束,例如顶部底部前导和带有标题的水平间距。
    • 标题标签已设置 numberOfLines = 0
    • 在 heightForRowAt 中使用 UITableViewAutomaticDimension 设置单元格的动态高度

      func tableView(_ tableView: UITableView, heightForRowAt 
      indexPath: IndexPath) -> CGFloat {
          return UITableViewAutomaticDimension
      } 
      

    【讨论】:

    • 如何设置我的投票 > 约束?
    • @Kinja 看我的回答。
    • 这是一个跳转到另一个页面的按钮
    • 好吧,那有什么问题.. 设置约束 top, bottom ,导致单元格内容视图和带有标题标签的水平间距
    • 另外确保你已经为单元格内容视图设置了标题标签顶部、底部和前导约束
    【解决方案4】:

    您将 UILabel 属性设置为 numberOfLines = 0

    1. 设置 UILabel 顶部、底部、前导、尾随约束

    1. 添加 UITableViewDelegate 方法。

      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
          return UITableViewAutomaticDimension
      }
      
    2. 还可以像这样设置您的投票约束

    1. 选择您的投票 UIButton 设置 约束

      1. 步设置 Top 、 bottom 、leading 、 trailing 和固定宽度。

    1. 步骤设置垂直居中约束

    【讨论】:

    • 是否有关于如何进行约束的分步教程?很抱歉,我对 swift 比较陌生
    • @Kinja 查看设置投票 UIButton 约束步骤的更新答案。
    • ibb.co/fmKVhS 显然它已被锁定,我可以设置它(即使我取消勾选“限制边距”
    • @Kinja 出了点问题,它对我有用,尝试退出 xcode 并重新打开。您的投票按钮在哪里?
    • 噢,对不起,dixit,我可能说错了,它不是一个按钮,只是一个跳转到下一页的文本标签
    【解决方案5】:

    您需要将行设置为 0:

    您可以直接从 StoryBoard 进行设置:

    或者您可以通过编程方式设置:

    cell.textLabel?.numberOfLines = 0
    cell.detailTextLabel?.numberOfLines = 0
    

    希望得到帮助。

    编辑:TableView 约束的演示

    我在相邻的单元格中取了两个标签:

    这是我的 TableView 输出:

    这是 label First 的约束:

    这是标签 2 的约束:

    是的,它对我有用,文本是多行的,没有文本切割,请仔细检查你的约束。

    编辑以查看约束

    选择标签,然后选择显示尺寸检查器:

    向下滚动,您可以看到给定的约束。

    编辑 2

    根据您的描述,您可以自动调整大小:

    所以你可以使用以下内容:

    对于标签一

    对于第二个标签:

    【讨论】:

    • 我是否也必须将此应用于详细文本标签?
    • @Kinja 是的,表格视图单元格中的每个标签。这将使文本分成两行
    • @Kinja 您是否为标签指定了 Top、Bottom、前导和尾随约束?这样效果最好
    • 也告诉我你目前的限制,这将帮助我找到你的问题
    • 显然我的两个标签的约束都被锁定了。你能为你做吗?
    猜你喜欢
    • 2013-04-19
    • 2023-03-16
    • 1970-01-01
    • 2016-05-18
    • 2015-07-20
    • 2018-04-13
    • 1970-01-01
    • 2016-09-03
    • 2018-10-31
    相关资源
    最近更新 更多