- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个显示用户评论的UitableView。在每个单元格中,我还嵌入了另一个 UITableView,用于显示对这些评论的回复(如果有)。当我按下“回复”按钮时,我想将此回复表的高度(默认为 0)更改为 1000,以显示此内部 UITableView 呈现的回复列表。我尝试停用此内部 UITableView 的默认高度约束(0),但没有成功,我不知道为什么。
下面是这个外部 UITableView 的 UITableViewCell 的代码
class CommentTableViewCell: UITableViewCell {
var nameLabel: UILabel = {
let label = UILabel()
label.font = .boldSystemFont(ofSize: 11)
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
var imgView: UIImageView = {
let view = UIImageView()
view.backgroundColor = UIColor.black
view.contentMode = .scaleAspectFit
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
var replyLabel: UILabel = {
let label = UILabel()
label.text = "Reply"
label.textColor = UIColor.appGrayForButtonTitles
label.font = UIFont.systemFont(ofSize: 11)
label.isUserInteractionEnabled = true
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
var numRepliesLabel: UILabel = {
let label = UILabel()
label.font = .boldSystemFont(ofSize: 11)
label.textColor = UIColor.app0946BF
label.textAlignment = .right
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
var repliesTextLabel: UILabel = {
let label = UILabel()
label.text = "Replies"
label.font = .boldSystemFont(ofSize: 11)
label.textColor = UIColor.app0946BF
label.isUserInteractionEnabled = true
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
var timeReplyContainer: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
var timeAgoLabel: UILabel = {
let label = UILabel()
label.text = "1 hr"
label.textColor = UIColor.appGrayLight
label.font = UIFont.systemFont(ofSize: 11)
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
var timeTextLabel: UILabel = {
let label = UILabel()
label.textColor = UIColor.appGrayLight
label.text = "ago"
label.font = UIFont.systemFont(ofSize: 11)
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
var repliesContainer: UIView = {
let view = UIView()
view.backgroundColor = UIColor.yellow
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
var cellIndexPath: IndexPath?
var commentLabel: LabelWithPadding!
var repliesTableView: RepliesToCommentsTableView!
var replyToCommentItems = [Comment]()
let repliesID = "repliesToCommentsID"
var numberOfRepliesToComment: Int = 0
fileprivate var oldConstraints = [NSLayoutConstraint]()
fileprivate var oldReplyTableHeightConstraints = [NSLayoutConstraint]()
fileprivate var totalCellHeight: CGFloat?
/** init is called before dataObject.didSet*/
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
print("CommentTableViewCell.INIT")
self.selectionStyle = .none
setupViews()
}
var dataObject: Comment?{
didSet{
if let data = dataObject{
guard
let image = data.imageOfCommentor,
let name = data.name,
let comment = data.comment,
let replies = data.repliesToComment else{return}
print("dataObject.didSet for :\(name)")
repliesTableView.sourceData = replies
repliesTableView.reloadData()
numberOfRepliesToComment = replies.count
numRepliesLabel.text = "\(replies.count)"
imgView.image = image
nameLabel.text = name
commentLabel.label.text = comment
/**Only show number of replies to comments if they exist*/
if numberOfRepliesToComment == 0{
numRepliesLabel.alpha = 0
repliesTextLabel.alpha = 0
}
}
}
}
override func updateConstraints() {
print("updateConstraints for : \(nameLabel.text!)")
super.updateConstraints()
}
override func layoutSubviews() {
super.layoutSubviews()
print("layoutSubviews for \(nameLabel.text!)")
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
let borderSpace: CGFloat = 10
let viewSpace: CGFloat = 5
private func setupViews(){
let c = contentView.safeAreaLayoutGuide
/**Create commentLabel*/
let padding = UIEdgeInsets.init(top: 3, left: 5, bottom: 3, right: 5)
commentLabel = LabelWithPadding.init(frame: .zero, with: padding)
commentLabel.translatesAutoresizingMaskIntoConstraints = false
/**Create reply to comments tableView*/
repliesTableView = RepliesToCommentsTableView.init(frame: .zero, style: .plain, sourceData: replyToCommentItems, cellid: repliesID)
repliesTableView.translatesAutoresizingMaskIntoConstraints = false
repliesTableView.isScrollEnabled = false
repliesTableView.backgroundColor = UIColor.green
timeReplyContainer.addSubview(timeAgoLabel)
timeReplyContainer.addSubview(timeTextLabel)
timeReplyContainer.addSubview(replyLabel)
timeReplyContainer.addSubview(numRepliesLabel)
timeReplyContainer.addSubview(repliesTextLabel)
contentView.addSubview(imgView)
contentView.addSubview(nameLabel)
contentView.addSubview(commentLabel)
contentView.addSubview(timeReplyContainer)
contentView.addSubview(repliesTableView)
commentLabel.label.font = UIFont.systemFont(ofSize: 12)
commentLabel.label.numberOfLines = 0
commentLabel.label.lineBreakMode = .byWordWrapping
commentLabel.layer.cornerRadius = 7
commentLabel.layer.masksToBounds = true
commentLabel.backgroundColor = UIColor.appGrayExtraLightGray
/**Layout constraints*/
NSLayoutConstraint.deactivate(oldConstraints)
NSLayoutConstraint.deactivate(oldReplyTableHeightConstraints)
let newConstraints = [
imgView.topAnchor.constraint(equalTo: c.topAnchor, constant: borderSpace),
imgView.leadingAnchor.constraint(equalTo: c.leadingAnchor, constant: borderSpace),
imgView.widthAnchor.constraint(equalTo: c.widthAnchor, multiplier: 0.08),
imgView.heightAnchor.constraint(equalTo: c.widthAnchor, multiplier: 0.08),
nameLabel.topAnchor.constraint(equalTo: c.topAnchor, constant: borderSpace),
nameLabel.leadingAnchor.constraint(equalTo: imgView.trailingAnchor, constant: 10),
nameLabel.trailingAnchor.constraint(equalTo: c.trailingAnchor, constant: -borderSpace),
commentLabel.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: viewSpace),
commentLabel.widthAnchor.constraint(equalTo: nameLabel.widthAnchor),
commentLabel.trailingAnchor.constraint(equalTo: c.trailingAnchor, constant: -borderSpace),
timeReplyContainer.topAnchor.constraint(equalTo: commentLabel.bottomAnchor, constant: borderSpace),
timeReplyContainer.heightAnchor.constraint(equalToConstant: 30),
timeReplyContainer.widthAnchor.constraint(equalTo: nameLabel.widthAnchor),
timeReplyContainer.trailingAnchor.constraint(equalTo: c.trailingAnchor, constant: -borderSpace),
timeReplyContainer.bottomAnchor.constraint(equalTo: repliesTableView.topAnchor, constant: -10),
timeAgoLabel.leadingAnchor.constraint(equalTo: timeReplyContainer.leadingAnchor, constant: 5),
timeAgoLabel.topAnchor.constraint(equalTo: timeReplyContainer.topAnchor),
timeAgoLabel.trailingAnchor.constraint(equalTo: timeTextLabel.leadingAnchor, constant: -5),
timeAgoLabel.topAnchor.constraint(equalTo: timeTextLabel.topAnchor),
timeTextLabel.topAnchor.constraint(equalTo: timeReplyContainer.topAnchor),
timeTextLabel.trailingAnchor.constraint(equalTo: replyLabel.leadingAnchor, constant: -10),
replyLabel.topAnchor.constraint(equalTo: timeReplyContainer.topAnchor),
numRepliesLabel.topAnchor.constraint(equalTo: timeReplyContainer.topAnchor),
numRepliesLabel.trailingAnchor.constraint(equalTo: repliesTextLabel.leadingAnchor, constant: -5),
repliesTextLabel.topAnchor.constraint(equalTo: timeReplyContainer.topAnchor),
repliesTextLabel.trailingAnchor.constraint(equalTo: timeReplyContainer.trailingAnchor),
repliesTableView.widthAnchor.constraint(equalTo: nameLabel.widthAnchor),
repliesTableView.trailingAnchor.constraint(equalTo: c.trailingAnchor, constant: -borderSpace),
repliesTableView.bottomAnchor.constraint(equalTo: c.bottomAnchor, constant: -borderSpace)]
NSLayoutConstraint.activate([repliesTableView.heightAnchor.constraint(equalToConstant: 0)])
NSLayoutConstraint.activate(oldReplyTableHeightConstraints)
NSLayoutConstraint.activate(newConstraints)
oldConstraints = newConstraints
oldReplyTableHeightConstraints = [repliesTableView.heightAnchor.constraint(equalToConstant: 0)]
setupTapGestures()
}
private func setupTapGestures(){
let tapGesture = UITapGestureRecognizer.init(target: self, action: #selector(showRepliesToComment))
self.repliesTextLabel.isUserInteractionEnabled = true
self.repliesTextLabel.addGestureRecognizer(tapGesture)
}
@objc func showRepliesToComment(){
print("show replies to comments")
self.oldReplyTableHeightConstraints[0].isActive = false
NSLayoutConstraint.deactivate(oldReplyTableHeightConstraints)
self.oldReplyTableHeightConstraints.remove(at: 0) print("showRepliesToComment.oldReplyTableHeightConstraints: (oldReplyTableHeightConstraints)") print("showRepliesToComment.oldReplyTableHeightConstraints.count: (oldReplyTableHeightConstraints.count)")
let newConstraints = [self.repliesTableView.heightAnchor.constraint(equalToConstant: 1000)]
NSLayoutConstraint.activate(newConstraints)
self.oldReplyTableHeightConstraints = newConstraints
self.layoutIfNeeded()
}
}
控制台显示:
show replies to comments
showRepliesToComment.oldReplyTableHeightConstraints: []
showRepliesToComment.oldReplyTableHeightConstraints.count: 0
2020-02-05 09:04:36.468617+0000 Labuuk[8200:354387] [LayoutConstraints] Unable to
simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x600000425450 Labuuk.RepliesToCommentsTableView:0x7fdb13111000.height
== 0 (active)>",
"<NSLayoutConstraint:0x60000041cb40 Labuuk.RepliesToCommentsTableView:0x7fdb13111000.height
== 1000 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60000041cb40 Labuuk.RepliesToCommentsTableView:0x7fdb13111000.height
== 1000 (active)>
从控制台可以看出,我已经明显停用了,然后手动删除了约束(出于绝望),然后停用了高度约束(为了更好的措施),但它仍然存在导致冲突!
最佳答案
我猜,问题是您在清除约束列表后将其停用。
因此尝试替换方法顶部的这一行showRepliesToComment:
NSLayoutConstraint.deactivate(oldReplyTableHeightConstraints)
因为现在您尝试停用一个空列表。
关于swift - 无法删除 NSLAyoutConstraint/使其处于非事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60072367/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!