JSQMessagesViewController 找不到 heightForCellTopLabelAtIndexPath

JSQMessagesViewController can't find heightForCellTopLabelAtIndexPath

正如我的问题所说:我目前正在 Xamarin.iOS 中实现 JSQMessagesViewController 组件,目前一切正常,但由于某种原因,我找不到 this link 中描述的 heightForCellTopLabelAtIndexPath 方法.所有其他方法对我来说都是可见的,甚至 returns 顶部单元格标签的属性文本也是如此。

感谢您的帮助!

哇,我什至不知道你可以在 Xamarin 应用程序中使用这个库,而且我也没有在 Xamarin 中做任何事情,但这太酷了。那么根据你的问题。我也看不到该方法,所以可能文档已关闭但可以使用:

 override func collectionView(_ collectionView: JSQMessagesCollectionView!, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout!, heightForMessageBubbleTopLabelAt indexPath: IndexPath!) -> CGFloat {
    return firstMessageInSet(indexOfMessage: indexPath) ? 0 : kJSQMessagesCollectionViewCellLabelHeightDefault
} 

唯一的区别是它引用的是 messageBubbleTopLabel 而不是 CellTopLabel per say。我认为这是正确的使用方法。

在提供的屏幕截图中,我展示了这如何影响消息的外观。第一条消息的大小设置为 kJSQMessagesCollectionViewCellLabelHeightDefault,后面的消息设置为 0

因此,如果这是您想要实现的目标,那么这就是适合您的方法。如果没有,请告诉我,我会看看是否还有其他我们可以做的事情。

继续努力。

我认为您正在寻找 GetMessageBubbleTopLabelHeight!

我不知道该库有任何面向 Xamarin 的文档,但我很乐意为您提供示例用法 =)

我是这样使用函数的:

public override nfloat GetMessageBubbleTopLabelHeight (MessagesCollectionView collectionView, MessagesCollectionViewFlowLayout collectionViewLayout, NSIndexPath indexPath)
    {
        Message message = Messages [indexPath.Row];

        if (message.SenderId == Sender.UserId.ToString())
            return 0.0f;

        if (indexPath.Row - 1 >= 0) {
            Message previousMessage = Messages [indexPath.Row - 1];
            if (previousMessage.SenderId == message.SenderId)
                return 0.0f;
        }
        return 20.0f;
    }

最后我只是使用了 GetCellTopLabelAttributedText 并对其进行了修改以适合我的用例。换句话说,我将文本居中对齐,删除了 contentInset 并更改了字体。我放弃了寻找缺少的方法