如何为UITableViewCell的textLabel和detailTexLabel设置约束

时间:2018-10-10 07:09:11

标签: ios swift xcode

我想做同样的事情,以从左到右放置UITableViewCell元素。

var cell = tableView.dequeueReusableCell(withIdentifier: "Starred")
if cell == nil {
    cell = UITableViewCell(style: .subtitle, reuseIdentifier: "Starred") 
}
return cell!

2 个答案:

答案 0 :(得分:0)

在这种情况下,我发现可以以编程方式布局自定义单元格。

还要保持ViewController的精简,请创建自定义单元的子类,并重写将.subtitle作为样式传递的init方法。

示例:

class StarCell: UITableViewCell {
     override init(style: UITableViewCellStyle, resuseIdentifier: String?) {
         super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)

         self.detailTextLabel?.translatesAutoresizingMaskIntoConstraints = false
         self.detailTextLabel?.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -10).isActive = true
         self.detailTextLabel?.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
         self.detailTextLabel?.heightAnchor.constraint(equalToConstant: 30).isActive = true

         self.detailTextLabel.text = "Testing Subtitle"
     }
}

与textLabel几乎相同。不要忘记将autoresizingMaskIntoConstraints设置为false,因为它为false,所以必须设置高度或宽度,否则标签将无法呈现。如果您希望标签高度根据屏幕尺寸而变化,则可以在设置约束时使用乘数参数。

NB。 Xcode会抱怨需要所需的init方法,只需单击红点并修复即可。 Xcode会自动为您插入代码。

答案 1 :(得分:0)

尝试一下,就我而言,我调整了textLabel和imageView的大小

import UIKit
class TableViewCellClass: UITableViewCell {

override func awakeFromNib() {
    super.awakeFromNib()
}

override func layoutSubviews() {
    super.layoutSubviews()
    if UIDevice().userInterfaceIdiom == .pad {
        //Here change your detailedTextLabel
        imageView?.frame = CGRect(x: 25, y: 15.0, width: 25, height: 25)//Change left menu table view image size
        imageView?.contentMode = UIViewContentMode.scaleAspectFit
        textLabel?.frame = CGRect(x: 70, y: 12.5, width: 250, height: 30)//Change left menu table view text label size
    } else {
        //Here change your detailedTextLabel
        imageView?.frame = CGRect(x: 15, y: 12.5, width: 25, height: 25)//Change left menu table view image size
        imageView?.contentMode = UIViewContentMode.scaleAspectFit
        textLabel?.frame = CGRect(x: 60, y: 12.5, width: 200, height: 25)//Change left menu table view text label size
    }
}