自定义iOS Xib视图未显示在情节提要中

时间:2020-01-21 21:13:02

标签: xcode xamarin xamarin.ios interface-builder xib

我们的Xamarin iOS应用程序中有许多表格视图,这些表格视图具有重复的情节提要代码以呈现表格行单元格。我试图创建一个包含表行单元格元素的自定义iOS视图(xib),以便可以在我们应用程序中的所有表视图中重用它。

我遵循了不同的教程,并阅读了许多SO文章来设置自定义iOS视图,并构建并运行了所有内容,但是表格行单元格现在显示为空白行,而不是实际呈现xib的内容。在自定义视图中的代码中,我能够成功访问元素并填充标签,图像等...,但没有任何区别,它仍显示为空白白线:

enter image description here

以下是该行的屏幕截图:

enter image description here

这是xib文件:

enter image description here

在这里,我将文件所有者设置为我的自定义类:

enter image description here

这是情节提要,其中我将自定义类引用为表格视图的表格行单元格:

enter image description here

这是我从表格视图源类实例化表格行单元格的方式:

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) {
                    var cell = tableView.DequeueReusableCell (SearchResultUITableViewCell.ReuseKey) as PropertySearchResultRow;
                    cell.Bind (/* Passes in some data to populate the row */);
                    return cell;
            }
        }

最后,这是我的自定义视图类中的AwakeFromNib方法:

[Export ("awakeFromNib")]
        public override void AwakeFromNib () {
            base.AwakeFromNib ();
            if (Site != null && Site.DesignMode)
                return;

            var nibObjects = NSBundle.MainBundle.LoadNib ("PropertySearchResultRow", this, null);
            var view = (UIView)Runtime.GetNSObject (nibObjects.ValueAt (0));
            view.Frame = Bounds;
            view.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
            AddSubview (view);
        }

我缺少什么步骤才能正确显示自定义视图的内容?

2 个答案:

答案 0 :(得分:1)

1。记住通过在控制器的构造函数中调用RegisterNibForCellReuse来注册要使用的单元格xib:

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
        // Perform any additional setup after loading the view, typically from a nib.

        UITableView tablView = new UITableView();

        UINib Nib = UINib.FromName("TableViewCell1", NSBundle.MainBundle);
        tablView.RegisterNibForCellReuse(Nib, "reuseID");
    }

2。在AwakeFromNib中获得的边界或框架有时不正确,您应将代码移至LayoutSubviews以使用适当的边界:

    public override void LayoutSubviews()
    {
        base.LayoutSubviews();

        var nibObjects = NSBundle.MainBundle.LoadNib("PropertySearchResultRow", this, null);
        var view = (UIView)Runtime.GetNSObject(nibObjects.ValueAt(0));
        view.Frame = Bounds;
        view.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
        AddSubview(view);
    }

答案 1 :(得分:0)

我能够使我的自定义iOS视图xib正确显示。事实证明,我做得很好,只是我缺少将嵌入式视图锚定到其父表视图单元格的约束。