为啥在 subView 中添加 UILabel 会使其像素化
Posted
技术标签:
【中文标题】为啥在 subView 中添加 UILabel 会使其像素化【英文标题】:Why does adding UILabel in subView makes it pixelated为什么在 subView 中添加 UILabel 会使其像素化 【发布时间】:2017-03-12 04:26:16 【问题描述】:我正在制作一条消息,当 tableView 为空并且我在 subView 中添加了一个标签并且它似乎被像素化时显示。但是当我在我的 tableView 中添加一些东西并删除它时,显示的消息(UILabel)就很好了。想不通为什么。
在self.tableView.backgroundView = emptyLabel
中添加标签可以解决问题,但我想添加两个标签,所以我在subView
中添加一个标签,使其像素化。
这是我的代码:
class ReminderTableViewController: UITableViewController
@IBOutlet var myTableView: UITableView!
@IBOutlet weak var dateLabel: UIView!
@IBAction func back(_ sender: Any)
dismiss(animated: true, completion: nil)
override func viewDidLoad()
super.viewDidLoad()
self.tableView.separatorColor = UIColor.clear
tableView.separatorStyle = .none
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
performSegue(withIdentifier: "details", sender: self)
public func buttonImageForEmptyStateView() -> UIImage?
return UIImage.init(named: "Exclamation Mark Filled-100-2")
override func viewDidAppear(_ animated: Bool)
tableView.reloadData()
self.reloadEmptyState(forTableView: self.tableView)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
override func numberOfSections(in tableView: UITableView) -> Int
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
if list.count==0
let emptyLabel=UILabel(frame: CGRect(x: 0,y: 0, width: self.view.bounds.width, height: self.view.bounds.height))
let emptyLabel2=UILabel(frame: CGRect(x: 0.0,y: 20.0, width: self.view.bounds.width, height: self.view.bounds.height))
self.view.addSubview(emptyLabel2)
self.view.addSubview(emptyLabel)
let emptyImage = UIImageView(image: UIImage(named: "Quote Right Filled-100 (3)"))
emptyImage.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(emptyImage)
emptyImage.alpha=0.1
NSLayoutConstraint.activate([
emptyImage.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
emptyImage.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
emptyImage.heightAnchor.constraint(equalToConstant: 90),
emptyImage.widthAnchor.constraint(equalToConstant: 90)
])
emptyLabel.text = "no present reminders"
emptyLabel.textColor=UIColor.darkGray
emptyLabel.font=UIFont(name: "HelveticaNeue-Light", size: 18)
emptyLabel.textAlignment = NSTextAlignment.center
emptyLabel2.text = "you add by going back to the homescreen"
emptyLabel2.textColor=UIColor.gray
emptyLabel2.font=UIFont(name: "HelveticaNeue-Light", size: 11)
emptyLabel2.textAlignment = NSTextAlignment.center
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.none
return 0
else
return (list.count)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell=UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
cell.textLabel?.text=list[indexPath.row]
cell.contentView.backgroundColor = UIColor(red:0.89, green:0.89, blue:0.89, alpha:0.7)
cell.textLabel?.textColor=UIColor.black
cell.textLabel?.font=UIFont(name: "HelveticaNeue-Light", size: 16)
return (cell)
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
if editingStyle==UITableViewCellEditingStyle.delete
list.remove(at: indexPath.row)
tableView.reloadData()
【问题讨论】:
标签的父级(或父级的父级&c)是否有变换? 不,没有使用转换。 你试过在iphone而不是模拟器上测试吗? @Alshcompiler 是的,我有。结果是一样的。 你在哪里调用这个代码 【参考方案1】:numberOfRowsInSection
被多次调用,所以没有添加子视图的好地方,因为每次这个函数调用另一个 UILabel 的实例添加到视图层次结构。
删除在numberOfRowsInSection
中添加标签。添加类变量:
var emptyLabel: UILabel!
var emptyLabel2: UILabel!
var emptyImage: UIImageView!
然后添加函数
func createEmptyLabels()
emptyLabel=UILabel(frame: CGRect(x: 0,y: 0, width: self.view.bounds.width, height: self.view.bounds.height))
emptyLabel2=UILabel(frame: CGRect(x: 0.0,y: 20.0, width: self.view.bounds.width, height: self.view.bounds.height))
self.view.addSubview(emptyLabel2)
self.view.addSubview(emptyLabel)
emptyImage = UIImageView(image: UIImage(named: "Quote Right Filled-100 (3)"))
emptyImage.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(emptyImage)
emptyImage.alpha=0.1
NSLayoutConstraint.activate([
emptyImage.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
emptyImage.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
emptyImage.heightAnchor.constraint(equalToConstant: 90),
emptyImage.widthAnchor.constraint(equalToConstant: 90)
])
emptyLabel.text = "no present reminders"
emptyLabel.textColor=UIColor.darkGray
emptyLabel.font=UIFont(name: "HelveticaNeue-Light", size: 18)
emptyLabel.textAlignment = NSTextAlignment.center
emptyLabel2.text = "you add by going back to the homescreen"
emptyLabel2.textColor=UIColor.gray
emptyLabel2.font=UIFont(name: "HelveticaNeue-Light", size: 11)
emptyLabel2.textAlignment = NSTextAlignment.center
emptyLabel.isHidden = true
emptyLabel2.isHidden = true
emptyImage.isHidden = true
在viewDidLoad
中调用这个函数
在numberOfRowsInSection
:
let hideEmptyViews = (list.count != 0)
emptyLabel.isHidden = hideEmptyViews
emptyLabel2.isHidden = hideEmptyViews
emptyImage.isHidden = hideEmptyViews
【讨论】:
当表格有一些条目时,它会显示标签和 imageView。它起着反作用。我希望它在 TableView 为空时显示 我写错了,应该是let hideEmptyViews = (list.count != 0)
我已经编辑了我的答案。
是的,它有效,知道如何更改标签和 UIImages 的出现顺序。我希望我的图像位于我的标签之下。
使用UIStackView
【参考方案2】:
您在numberOfRowsInSection
中添加标签。问题是这个方法被调用了很多次。因此,您添加了许多标签副本,彼此堆叠在一起,这使标签看起来很有趣。
【讨论】:
如何去掉这堆东西,让标签看起来不好笑。 如果您已经添加了标签并且它仍然存在,请不要再次添加。 我没有看到你在添加标签后删除标签,或者检查以查看它是否已添加。因此,正如我所说,它只是一次又一次地添加。您只是确认了我已经回答的内容。以上是关于为啥在 subView 中添加 UILabel 会使其像素化的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 superview-with-subview 在模态显示(使用自动布局)时会缩小?
为啥在 Interface Builder 中更改字体大小会阻止 UILabel 调整大小以适应内容?