Xamarin iOS Table 查看与搜索栏相交的单元格

Xamarin iOS Table View Cells Intersecting Search Bar

我正在使用 Xamarin 编写 iOS 应用程序,table 视图和搜索栏出现问题 - 当搜索栏被点击并输入文本时,搜索结果视图控制器无法正常工作 - 单元格在滚动时与搜索栏相交。

为清楚起见,我记录了问题:

YouTube - iOS Problem

到目前为止,我 worked-out 认为问题与节数、节 header 或 table header 无关。不过现在完全没有想法了...

下面可以作为例子,同样的问题也出现在那里:

GitHub - TableSearch

在这个例子中,在'MainTableViewController.cs'文件中的'ViewDidLoad ()'方法末尾添加下面一行代码会使问题更加明显:

searchController.SearchBar.SearchBarStyle = UISearchBarStyle.Minimal;

编辑

看下图,我理想情况下需要删除或缩小顶部区域(iOS 导航栏似乎是 space):

您是否查看过来自 Xamarin here 的示例,它与您使用的布局相同,只是为了比较您如何设置搜索栏。

编辑 我现在明白你的意思了,我认为这是 iOS 中的一个错误,因为背景颜色在搜索栏上是透明的,你永远不会想要那样。 我刚刚添加了另一个视图来掩盖状态栏并将背景颜色设置为白色:

        searchController.SearchBar.SearchBarStyle = UISearchBarStyle.Minimal;

        searchController.SearchBar.BackgroundColor = UIColor.White;
        var frame = searchController.SearchBar.Frame;
        frame.Height = searchController.SearchBar.Frame.Height + 22; 
        frame.Y = searchController.SearchBar.Frame.Y - 22;
        var bckGRound = new UIView (frame);
        bckGRound.BackgroundColor = UIColor.White;
        searchController.SearchBar.InsertSubview (bckGRound, 0);

更新 我意识到对于你的场景你不能只添加一个视图来掩盖它所以我正在考虑像这样向搜索栏添加模糊:

        var frame = searchController.SearchBar.Frame;
        frame.Height = searchController.SearchBar.Frame.Height + 44; 
        frame.Y = searchController.SearchBar.Frame.Y - 22;

        var blurryBackGround = new UIView (frame);
        if (!UIAccessibility.IsReduceTransparencyEnabled) 
        {
            blurryBackGround.BackgroundColor = UIColor.Clear;
            var blureffect = UIBlurEffect.FromStyle (UIBlurEffectStyle.Light);
            var blureffectview = new UIVisualEffectView (blureffect);
            blureffectview.Frame = frame;
            blurryBackGround.AddSubview (blureffectview);
        }
        else
        {
            blurryBackGround.BackgroundColor = UIColor.Black;
        }
        searchController.SearchBar.InsertSubview (blurryBackGround, 0);

更新 2

如果您的背景不随 table 移动,那么您只需裁剪搜索栏覆盖的背景图像部分,然后使用以下代码设置搜索栏的背景图像即可:

        searchController.SearchBar.SetBackgroundImage (new UIImage ("image.jpg"), UIBarPosition.TopAttached, UIBarMetrics.Default);

这是 UISearchController 的默认行为。您可以更改背景颜色,使行不会出现在 searchBar 后面,但这似乎不是您想要的行为。另一种选择是在您的 ViewController 上实现 UISearchBar,这是我所拥有的,它确实会随着行滚动,这是您正在寻找的行为。希望这有帮助。

参见:https://github.com/xamarin/monotouch-samples/tree/master/SearchDemo/SearchDemo