tableView滚动问题Xamarin.ios

时间:2015-08-20 15:12:01

标签: c# ios uitableview xamarin xamarin.ios

我们正在iOS 9(测试版)设备中测试我们的应用程序。加载表视图时应用程序崩溃。但是相同的代码在iOS 8中运行良好。

请找到以下代码

当前代码段

表格视图数据源

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) 
{
    tableView.RegisterNibForCellReuse(UINib.FromName("summaryListCell", NSBu   ndle.MainBundle), "summaryListCell");
    summaryListCell cell = (summaryListCell)tableView.DequeueReusableCell(new NSString("summaryListCell"), indexPath);

    cell.SetNeedsLayout ();

    return cell;
}

TableView Cell类

using System;
using CoreGraphics;
using Foundation;
using UIKit;
using WBid.WBidiPad.Model;
using WBid.WBidiPad.SharedLibrary;
using System.Linq;
using WBid.WBidiPad.Core;
using System.Collections.Generic;

namespace WBid.WBidiPad.iOS
{

    public partial class summaryListCell : UITableViewCell
    {
        public static readonly UINib Nib = UINib.FromName("summaryListCell", NSBundle.MainBundle);
        public static readonly NSString Key = new NSString("summaryListCell");

        public summaryListCell(IntPtr handle) : base(handle)
        {                        
            laySubViews (this);       
        }

        public static summaryListCell Create()
        {
            summaryListCell cell = (summaryListCell)Nib.Instantiate(null, null)[0];
            return cell;
        }

        public static  void laySubViews(summaryListCell cell)
        {
            Console.WriteLine (cell);
            UIImageView imgBack = new UIImageView();
            imgBack.Frame = new CGRect (0, 0, 900, 50);
            imgBack.Tag = 1010;
            cell.ContentView.AddSubview(imgBack);
        }
    }
}

经过大量的思考和研究,我稍微改变了一下代码。初始化单元格后,我调用了layout subviews()类。请在下面找到代码

修改后的代码段

表格视图数据源

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
    tableView.RegisterNibForCellReuse(UINib.FromName("summaryListCell", NSBu   ndle.MainBundle), "summaryListCell");
     summaryListCell cell = (summaryListCell)tableView.DequeueReusableCell(new NSString("summaryListCell"), indexPath);
     // Added layoutsubview calling after initialization   
     cell.laySubViews(cell);        
     cell.SetNeedsLayout ();

     return cell;
 }

TableView Cell类

using System;
using CoreGraphics;
using Foundation;
using UIKit;
using WBid.WBidiPad.Model;
using WBid.WBidiPad.SharedLibrary;
using System.Linq;
using WBid.WBidiPad.Core;
using System.Collections.Generic;

namespace WBid.WBidiPad.iOS
{

    public partial class summaryListCell : UITableViewCell
    {
        public static readonly UINib Nib = UINib.FromName("summaryListCell", NSBundle.MainBundle);
        public static readonly NSString Key = new NSString("summaryListCell");

        public summaryListCell(IntPtr handle) : base(handle)
        {    
            // Removed the layoutsubview calling method                    
            // laySubViews(this);       
        }

        public static summaryListCell Create()
        {
            summaryListCell cell = (summaryListCell)Nib.Instantiate(null, null)[0];
            return cell;
        }

        // Changed the static property from laySubViews method
        public void laySubViews(summaryListCell cell)
        {
            Console.WriteLine (cell);
            UIImageView imgBack = new UIImageView();
            imgBack.Frame = new CGRect (0, 0, 900, 50);
            imgBack.Tag = 1010;
            cell.ContentView.AddSubview(imgBack);
        }
    }
}

通过上述修改,代码段在iOS 8和iOS 9中都有效。

我们在TableView中加载了400行(它只是一个数字,我们正在动态加载TableView)。现在TableView的滚动性能存在问题。滚动TableView时,TableView会挂起。

你能给我一个适用于iOS 8和iOS 9的解决方案吗?

请在下面找到系统详细信息。我们正在设备中测试iOS 9,我们正在使用以下配置部署应用程序,并且我们使用此配置得到确切的崩溃错误(我们在此配置中获得的错误与从App Store下载的应用程序获得的错误相同)

  

=== ====== ====== Xamarin Studio ====== ====== ===

     

版本5.9.3(版本1)安装UUID:   d1449294-29ae-49f6-ab88-23f11a709f17运行时:单声道4.0.1   ((已分离/ ed1d3ec)GTK + 2.24.23(罗利主题)

     

包装版本:400010044

     

=== Apple Developer Tools ===

     

Xcode 6.3(7569)Build 6D570

     

=== Xamarin.iOS ===

     

版本:8.10.1.64(商业版)哈希:e6ebd18分支:主人   建设日期:2015-05-21 21:55:09-0400

     

===建立信息===

     

发行ID:509030001 Git修订版:   5a524e1726ed103fdd4fe37e0356f2b35466ce9d建立日期:2015-06-02   16:35:08-04 Xamarin地址:51957cfbd06be911b212671ad05c2c6221ac90f9

     

===操作系统===

     

Mac OS X 10.10.3 Darwin Deepaks-Mac.local 14.3.0 Darwin内核版本   14.3.0   2015年3月23日星期一11:59:05 PDT   root:xnu-2782.20.48~5 / RELEASE_X86_64 x86_64

     

=== ====== ====== ====== ====== ====== ===

请您为这种情况提供解决方案吗?

2 个答案:

答案 0 :(得分:0)

  1. 在viewDidLoad中调用tableView.RegisterNibForCellReuse一次。每次获得一个单元格时都不需要注册
  2. 致电cell. laySubViews(cell);cell.SetNeedsLayout ();是多余的。我没有看到你为什么需要这样做的原因。

答案 1 :(得分:0)

问题在于Xamarin.iOS,我更新了Xamarin.iOS最新的稳定版本8.10.4.46。现在它在iOS8和iOS 9中完美运行。我没有更改任何代码段。现在我正在使用上面提到的第一个代码片段。