gpt4 book ai didi

ios - 在 UITableviewCell 中使用自动布局

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:38 25 4
gpt4 key购买 nike

我正在尝试通过 snapKit 快速使用自动调整大小的 UITableView 单元格! UITableView上设置的相关标志位如下:

self.rowHeight = UITableViewAutomaticDimension
self.estimatedRowHeight = 70.0

我在我的 customUITableviewCell 类中定义了一个 UITextField,例如:

var uidTextField: UITextField = UITextField()

我的自定义 UITableViewCell 中文本字段的初始设置如下所示:

self.contentView.addSubview(uidTextField)
uidTextField.attributedPlaceholder = NSAttributedString(string: "Woo Hoo", attributes: [NSForegroundColorAttributeName:UIColor.lightGrayColor()])
uidTextField.textAlignment = NSTextAlignment.Left
uidTextField.font = UIFont.systemFontOfSize(19)
uidTextField.returnKeyType = UIReturnKeyType.Done
uidTextField.autocorrectionType = UITextAutocorrectionType.No
uidTextField.delegate = self
uidTextField.addTarget(self, action: "uidFieldChanged", forControlEvents: UIControlEvents.EditingChanged)
uidTextField.snp_makeConstraints { make in
make.left.equalTo(self.contentView).offset(10)
make.right.equalTo(self.contentView)
make.top.equalTo(self.contentView).offset(10)
make.bottom.equalTo(self.contentView).offset(10)
}

当我运行代码时,它显示被截断并在控制台中显示错误:

Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.

我的 autoLayout 约束有问题吗?还是 UIControls 和 UITableView 单元格的自动调整有问题?

最佳答案

在 SnapKit(和 Masonry)中,您必须使用负值来向 View 的右侧或底部添加填充。您在 bottom 约束上使用了 offset(10),这会导致文本字段底部 10pt 的效果被截断。

要解决这个问题,您必须给底部约束一个负偏移量:

uidTextField.snp_makeConstraints { make in 
make.left.equalTo(self.contentView).offset(10)
make.right.equalTo(self.contentView)
make.top.equalTo(self.contentView).offset(10)
make.bottom.equalTo(self.contentView).offset(-10)
}

或者您可以通过这样做获得相同的约束:

uidTextField.snp_makeConstraints { make in 
make.edges.equalTo(contentView).inset(UIEdgeInsetsMake(10, 10, 10, 0))
}

当您使用 inset() 方式时,您必须为右侧和底部插图使用正值。

我不明白为什么 SnapKit 对底部和右侧使用负值。我认为这是违反直觉的,而且有点令人困惑。

编辑:这是一个运行良好的小示例(我用包含 UITextField 的 3 个自定义单元格硬编码了一个 tableView):

View Controller :

import UIKit
import SnapKit

class ViewController: UIViewController {
let tableView = UITableView()

override func viewDidLoad() {
super.viewDidLoad()

view.addSubview(tableView)
tableView.dataSource = self
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 70
tableView.registerClass(CustomTableViewCell.self, forCellReuseIdentifier: "CustomCell")

tableView.snp_makeConstraints { (make) -> Void in
make.edges.equalTo(view)
}
}
}

extension ViewController: UITableViewDataSource {
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath)
return cell
}
}

CustomTableViewCell:

import UIKit

class CustomTableViewCell: UITableViewCell {
let textField = UITextField()

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)

textField.attributedPlaceholder = NSAttributedString(string: "Woo Hoo", attributes: [NSForegroundColorAttributeName:UIColor.lightGrayColor()])
textField.textAlignment = NSTextAlignment.Left
textField.font = UIFont.systemFontOfSize(19)
textField.returnKeyType = UIReturnKeyType.Done
textField.autocorrectionType = UITextAutocorrectionType.No
contentView.addSubview(textField)

textField.snp_makeConstraints { (make) -> Void in
make.edges.equalTo(contentView).inset(UIEdgeInsetsMake(10, 10, 10, 0))
}
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

关于ios - 在 UITableviewCell 中使用自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com