原型单元中的 UILabel 位置不正确
Posted
技术标签:
【中文标题】原型单元中的 UILabel 位置不正确【英文标题】:UILabel in Prototype Cell does not take correct position 【发布时间】:2016-02-02 14:41:38 【问题描述】:我有一个 UITableView
包含在 UIViewController 中。这个表格视图只有一个原型单元格。
该单元格包含一个UIImageView
和两个UILabel
。第一个标签设置正确(位置和文本)。但是第二个没有按预期定位。
我希望这个标签在单元格的内容视图中水平和垂直居中。但是当我做print(noFriendRequestLabel)
时,结果是:
<UILabel: 0x7af81c00; frame = (-42 -21; 42 21); text = 'Aucune invitation'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7af82680>>
标签采用正确的文本,但位置不正确。我正在使用故事板和自动布局。我不明白我做错了什么。
下面是cellForIndexPath()
的代码:
// "Friends requests" section
if indexPath.section == 0
// If requests array is empty, show "No request" label
if self.friendsRequestsArray.count == 0
let cell = tableView.dequeueReusableCellWithIdentifier("friendCell", forIndexPath: indexPath) as! FriendCustomCell
cell.noFriendRequestLabel.hidden = false
cell.noFriendRequestLabel.text = NSLocalizedString("No request", comment: "")
cell.friendAvatar.hidden = true
cell.friendName.hidden = true
cell.friendButton.hidden = true
print(cell.noFriendRequestLabel)
return cell
// Else display friends requests
else
let cell = tableView.dequeueReusableCellWithIdentifier("friendCell", forIndexPath: indexPath) as! FriendCustomCell
cell.noFriendRequestLabel.hidden = true
cell.friendAvatar.hidden = false
cell.friendName.hidden = false
cell.friendButton.hidden = false
cell.friendAvatar.image = self.friendsRequestsArray[indexPath.row].getAvatar()
cell.friendName.text = self.friendsRequestsArray[indexPath.row].toString()
cell.user = self.friendsArray[indexPath.row]
cell.user.delegate = UserEventsManager()
return cell
// "Your friends" section
else
let cell = tableView.dequeueReusableCellWithIdentifier("friendCell", forIndexPath: indexPath) as! FriendCustomCell
cell.noFriendRequestLabel.hidden = true
cell.friendAvatar.hidden = false
cell.friendName.hidden = false
cell.friendButton.hidden = false
cell.friendAvatar.image = self.friendsArray[indexPath.row].getAvatar()
cell.friendName.text = self.friendsArray[indexPath.row].toString()
cell.user = self.friendsArray[indexPath.row]
cell.user.delegate = UserEventsManager()
return cell
任何帮助将不胜感激。
这是标签的约束:
【问题讨论】:
我不这么认为。因为在我的第二部分,一切都正常显示。图像和标签按预期发生,有问题的标签被正确隐藏,而不是 nil。 问题不在于您发布的代码,而在于您在 IB 中定义的NSLayoutConstraint
。
屏幕截图 + IB 约束?
刚刚编辑了我的问题。
我总是在我的故事板中到处使用“This size class”。实际上,我从来没有问过自己这两种可能性……
【参考方案1】:
我已经弄清楚发生了什么。
在包含UITableView
的UIViewController
中,我正在向服务器发送一个请求,以获取用户的好友请求和当前好友。
所以,当这个请求结束时,我会重新加载表格视图的数据。但是,之前,在numberOfRowsInSection()
中,我已将数字设置为在请求结束之前。
结果是我正在重新加载第二部分的数据,而不是第一秒(我试图显示标签)的不是。
对我有用的是我在自定义UITableView
中添加了一个标志loadData
,设置为false
。当我的控制器中的请求结束时,我将此标志设置为true
。在numberOfRowsInSection()
中,如果标志为false
,则返回0;如果为true
,则返回每个部分的行数。
【讨论】:
以上是关于原型单元中的 UILabel 位置不正确的主要内容,如果未能解决你的问题,请参考以下文章
更改 TableViewController 中的 UILabel Y 位置
UICollectionViewCell 中的 UILabel 布局怪异
自动增加/减少 UITableViewCell 中的 UILabelView 高度?