在JSQMessagesViewController中显示LocationMediaItem

我刚刚尝试使用JSQMessagesViewController在我的Xamarin.iOS应用程序中实现JSQMessagesViewController 。 一切都很好,唯一的问题是应该显示位置的UICollectionView单元格永远停留在加载上,并且实际上从未显示地图。

以下是我在C#中创建locationMediaItem的一些代码:

 var locationMediaItem = new LocationMediaItem(new CLLocation(latitude, longitude)); if (ChatDB.Messages[indexPath.Row].user_id == SenderId) { locationMediaItem.AppliesMediaViewMaskAsOutgoing = true; return JSQMessagesViewController.Message.Create(ChatDB.Messages[indexPath.Row].user_id, User.Instance.name, locationMediaItem); } 

这是我的意思的图像:

这里

所以JSQMessagesViewController知道我希望它显示一个地图视图,但它永远不会停止加载,我无法弄清楚原因。

希望有人可以提供帮助。

与您有同样的问题,并能够使其工作。

诀窍是不要在LocationMediaItem构造函数上设置正确的位置,将其保留为null然后使用接收位置的方法SetLocation和作为参数的句柄。

 var itemLoationItem = new LocationMediaItem (); itemLoationItem.AppliesMediaViewMaskAsOutgoing = true; Messages.Add (Message.Create (SenderId, SenderDisplayName, itemLoationItem)); itemLoationItem.SetLocation (new CLLocation (lat, long), HandleLocationMediaItemCompletionBlock); 

在句柄中只需重新加载数据

 void HandleLocationMediaItemCompletionBlock () { this.CollectionView.ReloadData (); } 

注意 :避免在GetMessageData创建Message对象,因为每次重新加载Collectionview时都会调用此方法。 您应该在接收消息时或在发送消息时处理消息创建,并将其添加到消息集合中,然后在此方法中,您只需从集合中返回对象。

 public override IMessageData GetMessageData (MessagesCollectionView collectionView, NSIndexPath indexPath) { return Messages [indexPath.Row]; } 

图像显示位置

Interesting Posts