- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有动态变化的表格 View 单元格,其中两个标签彼此重叠。顶部标签始终有一些文本,但底部标签有时没有。加载表格 View 后,底部标签没有文本的单元格完全消失,只显示标题。如果我向下滚动并返回,这些以前丢失的单元格会正确显示。
我认为这与我的约束有关,但是当我尝试调整约束时,我只会让事情变得更糟。
如何设置约束,使单元格始终在加载屏幕时首先出现,包括底部标签没有文本时?
这是表格 View 单元格的代码:
class TransactionHistoryTableViewCell: UITableViewCell {
private var itemView = UIView()
private var itemNameLabel = UILabel()
private var sizeLabel = UILabel()
func setup(_ lineItem: MenuItem) {
contentView.backgroundColor = .white
configureItemNameLabel(lineItem)
configureSizeLabel(lineItem)
configureTransactionView(lineItem)
}
private func configureTransactionView(_ lineItem: MenuItem) {
itemView.clipsToBounds = true
itemView.layer.cornerRadius = 5
itemView.layer.borderColor = UIColor.lightGray.cgColor
itemView.layer.borderWidth = 0.5
itemView.backgroundColor = .white
contentView.addSubview(itemView)
itemView.translatesAutoresizingMaskIntoConstraints = false
itemView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
itemView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.8).isActive = true
itemView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 4).isActive = true
itemView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -4).isActive = true
}
private func returnText(_ menuItem: MenuItem) -> String {
var text = ""
guard let modifiers = menuItem.modifiers else { print("modifiers are nil"); return "" }
if modifiers.isEmpty && menuItem.quantity == 1 {
text = ""
} else if !modifiers.isEmpty && menuItem.quantity == 1 {
text = generateModifierText(menuItem)
} else if !modifiers.isEmpty && menuItem.quantity > 1 {
let theText = generateModifierText(menuItem)
text = "\(theText); Quantity: \(menuItem.quantity)"
} else {
text = "Quantity: \(menuItem.quantity)"
}
return text
}
private func configureItemNameLabel(_ lineItem: MenuItem) {
itemNameLabel.text = lineItem.name
let fontSize = getSize(large: 14, medium: 13.5, small: 12)
itemNameLabel.font = UIFont(name: AppFont.secondary.name, size: fontSize)
itemNameLabel.numberOfLines = 0
itemView.addSubview(itemNameLabel)
itemNameLabel.translatesAutoresizingMaskIntoConstraints = false
itemNameLabel.leftAnchor.constraint(equalTo: itemView.leftAnchor, constant: 15).isActive = true
let verticalOffset = getSize(large: 10, medium: 7, small: 5)
itemNameLabel.topAnchor.constraint(equalTo: itemView.topAnchor, constant: verticalOffset).isActive = true
itemNameLabel.widthAnchor.constraint(equalToConstant: 195).isActive = true
itemView.addSubview(sizeLabel)
itemNameLabel.bottomAnchor.constraint(equalTo: sizeLabel.topAnchor, constant: -3).isActive = true
}
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
override func prepareForReuse() {
super.prepareForReuse()
itemNameLabel.text = ""
sizeLabel.text = ""
}
private func configureSizeLabel(_ menuItem: MenuItem) {
guard let modifiers = menuItem.modifiers else { print("modifiers are nil"); return }
if modifiers.isEmpty && menuItem.quantity == 1 {
sizeLabel.text = ""
} else if !modifiers.isEmpty && menuItem.quantity == 1 {
sizeLabel.text = generateModifierText(menuItem)
} else if !modifiers.isEmpty && menuItem.quantity > 1 {
let text = generateModifierText(menuItem)
if text != "" {
sizeLabel.text = "\(text); Quantity: \(menuItem.quantity)"
} else {
sizeLabel.text = "Quantity: \(menuItem.quantity)"
}
} else {
sizeLabel.text = "Quantity: \(menuItem.quantity)"
}
sizeLabel.backgroundColor = .white
sizeLabel.textColor = .gray
sizeLabel.numberOfLines = 0
let fontSize = getSize(large: 11, medium: 10.5, small: 9.5)
sizeLabel.font = UIFont(name: AppFont.secondary.name, size: fontSize)
sizeLabel.translatesAutoresizingMaskIntoConstraints = false
sizeLabel.topAnchor.constraint(equalTo: itemNameLabel.bottomAnchor, constant: 3).isActive = true
sizeLabel.leftAnchor.constraint(equalTo: itemNameLabel.leftAnchor).isActive = true
sizeLabel.widthAnchor.constraint(equalToConstant: 200).isActive = true
sizeLabel.bottomAnchor.constraint(equalTo: itemView.bottomAnchor, constant: -3).isActive = true
}
private func generateModifierText(_ menuItem: MenuItem) -> String {
var text = ""
guard let modifiers = menuItem.modifiers else { return "" }
var optionNames = [String]()
for modifier in modifiers {
if !modifier.options.isEmpty {
for options in modifier.options{
if options.name.uppercased() != "NONE" {
optionNames.append(options.name)
}
}
}
}
for x in 0..<optionNames.count {
if x != optionNames.count - 1 {
text += "\(optionNames[x]), "
} else {
text += "\(optionNames[x])"
}
}
return text
}
private func generateSizeLabelFontSize() -> CGFloat {
return getSize(large: 11, medium: 10, small: 9.5)
}
}
来自 View Controller 的代码:
override func viewDidLoad() {
super.viewDidLoad()
configureNavBar()
configureTableView()
getOrders()
NotificationCenter.default.addObserver(self, selector: #selector(popToRootVC), name: NSNotification.Name(rawValue: "PopToRootVCFromSettingsVC"), object: nil)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "transactionHistoryCell", for: indexPath) as? TransactionHistoryTableViewCell else { getOrders(); return UITableViewCell() }
if let lineItem = orders[indexPath.section].lineItems?[indexPath.row] {
cell.setup(lineItem)
}
return cell
}
private func getOrders() {
let service = TransactionService()
service.getTransactionData(completion: { (orders) in
guard let orders = orders else { self.handleNoOrderHistory(); return }
let filteredOrders = orders.filter{ $0.status == "NEW" || $0.status == "IN_PROGRESS" || $0.status == "READY" || $0.status == "COMPLETE" }
if filteredOrders.isEmpty {
DispatchQueue.main.async {
self.handleNoOrderHistory()
return
}
} else {
DispatchQueue.main.async {
self.orders = filteredOrders.sorted{ $0.date > $1.date }
self.noOrdersView.isHidden = true
self.tableView.reloadData()
}
}
})
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 85
}
编译器会给出如下警告:
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.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
NSAutoresizingMaskLayoutConstraint:0x600001e972a0 h=--& v=--& UILabel:0x7f9a0050b780.midY == 0 (active),
NSAutoresizingMaskLayoutConstraint:0x600001e97610 h=--& v=--& UILabel:0x7f9a0050b780.height == 0 (active),
NSLayoutConstraint:0x600001e8bca0 V:|-(5)-[UILabel:0x7f9a0050b490'5\" Focaccia Everything'] (active, names: '|':UIView:0x7f9a0050b2b0 ),
NSLayoutConstraint:0x600001d63660 UILabel:0x7f9a0050b490'5\" Focaccia Everything'.bottom == UILabel:0x7f9a0050b780.top - 3 (active)
)
Will attempt to recover by breaking constraint
NSLayoutConstraint:0x600001d63660 UILabel:0x7f9a0050b490'5" Focaccia Everything'.bottom == UILabel:0x7f9a0050b780.top - 3 (active)
最佳答案
问题是,在添加任何 subview 并应用约束之前,您需要将其 translatesAutoresizing...
设置为 false
。
因此,您调用 configureItemNameLabel
并添加 sizeLabel
,在调用 configureSizeLabel
并修复其 >翻译自动调整大小...
。
关于ios - 单元格一开始不出现,但如果我向下滚动并返回,则会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067867/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!