gpt4 book ai didi

ios - Xamarin UITableView 不会滚动

转载 作者:行者123 更新时间:2023-11-29 10:37:37 24 4
gpt4 key购买 nike

我正在使用 Xamarin 开发一个小型测试 iOS 应用程序,该应用程序显示一个包含推文的 TableView。我有一个简化版帐户,所以我避免使用组件,因为它们会增加我的二进制文件的大小。

我有一个 TableViewController 并用足够的数据填充 UITableView 以生成滚动,但它不会滚动。

我已在 Storyboard 上将 Scroll Enabled 设置为 true,并且我的 TableSource 类有一个包含要显示的数据的列表。 UITableView 中的每个单元格(我使用的单元格样式是 UITableViewCellStyle.Value1)显示推文文本、发布者、创建日期和用户图像。

我的 TableSource 类的结构如下:

public class TableSource : UITableViewSource
{
List<Tweet> tableItems;
public static string cellIdentifier = "TableCell";
public Dictionary<string, UIImage> photoCache;

public TableSource (List<Tweet> items)
{
tableItems = items;
photoCache = new Dictionary<string, UIImage> ();
}

public override int RowsInSection(UITableView tableview, int section){
return tableItems.Count;
}

public override UITableViewCell GetCell(UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath){
UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier);

if (cell != null) {
cell = new UITableViewCell (UITableViewCellStyle.Value1, cellIdentifier);

}

var index = indexPath.Row;

var tweet = tableItems [index];

cell.TextLabel.Text = tweet.TweetText;
cell.DetailTextLabel.Text = "by " + tweet.UserName + " at " + tweet.CreatedAt.ToShortDateString();

if (!photoCache.ContainsKey(tweet.UserImage)) {
using (var imgUrl = new NSUrl (tweet.UserImage)) {
using (var data = NSData.FromUrl (imgUrl)) {
var img = UIImage.LoadFromData (data);
cell.ImageView.Image = img;
photoCache.Add (tweet.UserImage, img);
}
}
} else {
cell.ImageView.Image = photoCache [tweet.UserImage];
}
return cell;
}
}

如您所见,我有一个包含 Tweet 对象的列表(推文包含文本、用户名、DateTime 对象和用户图像 url),我还有一个字典来保存已下载的用户照片。单元格的创建没有问题,并且看起来像它们应该的那样。

但是 UITableView 不会滚动。

解析推文并创建 UITableView 源的方法是这样的:

    private void ReadStreamFromTwitterMentionsResponse(WebResponse response){
using (Stream responseStream = response.GetResponseStream ()) {
using (StreamReader sr = new StreamReader (responseStream)) {
// read response and parse it
string content = sr.ReadToEnd ();
var json = JsonObject.Parse (content);
var statuses = json ["statuses"];
// for each status create a Tweet object and put it in a List
foreach (JsonObject status in statuses) {
try{
var user_name = status ["user"] ["name"];
var user_image = status ["user"] ["profile_image_url"];
var tweet_text = status ["text"];
var tweet_date = status ["created_at"];
Console.WriteLine("tweet_date " + tweet_date);
DateTime tweet_date_obj = DateTime.ParseExact (tweet_date, "ddd MMM dd HH:mm:ss zzzz yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal);

tweets.Add(new Tweet(tweet_text, user_name, user_image, tweet_date_obj));
}catch(Exception ex){
Console.WriteLine ("Error " + ex.Message);
}
}
// After finishing filling the List with tweets, tell main thread to
// make a TableSource instance and pass the tweets list and to reload its data
InvokeOnMainThread (delegate {
TableView.Source = new TableSource (tweets);
TableView.ReloadData();
// The following line returns a Rectangle which height value is greater than the device's height
Console.WriteLine("content size " + TableView.ContentSize);
});
}
}
}

我在 CollectionViews 上遇到了类似的问题,控件中的内容足以引发滚动,但没有触发滚动。

我错过了什么吗?为什么不滚动内容?

编辑 1

为了确保 UITableView 确实有超出可见框架的单元格,我调用了 ScrollRectToVisible 方法并将 UITableView 滚动到指定区域,以编程方式我可以滚动但 UITableView 忽略了用户触摸手势。

是否必须指定触摸手势才能启用滚动?当我点击一行时它会被选中,那么为什么只有滚动没有响应?

编辑 2

我忘了澄清一些事情,UITableView 是通过带有 TableViewController 的 Storyboard 生成的。

最佳答案

这很可能是 iOS 模拟器中的错误。有时只是停止检测某些手势。退出模拟器并重新启动它。

UITableViewController 应该为您处理表格的滚动,而无需执行任何特殊操作。

关于ios - Xamarin UITableView 不会滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26126806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com