【问题标题】:Xamarin iOS Table View Cells Intersecting Search BarXamarin iOS 表格视图单元格与搜索栏相交
【发布时间】:2016-04-16 15:58:32
【问题描述】:

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

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

YouTube - iOS Problem

到目前为止,我发现问题与节数、节标题或表格标题无关。不过现在完全没有主意了……

以下可以作为示例,因为那里出现了同样的问题:

GitHub - TableSearch

在本例中,在“MainTableViewController.cs”文件中的“ViewDidLoad()”方法末尾添加以下代码行会使问题更加明显:

searchController.SearchBar.SearchBarStyle = UISearchBarStyle.Minimal;

编辑

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

【问题讨论】:

  • 您可以发布您的任何代码吗?

标签: ios xamarin tableview searchbar


【解决方案1】:

您是否看过 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

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

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

【讨论】:

  • 我看了一下代码,似乎和这个有同样的问题——当你进行搜索时,向上滚动,结果向上并在搜索栏后面;当您将“SearchBarStyle”属性更改为“UISearchBarStyle.Minimal”时,它会变得更加明显。然而,这个示例似乎确实表明结果进入的奇怪间隙(我认为可能是标题视图)似乎是 iOS 导航栏的空间......
  • 我真的需要保持搜索栏区域的背景透明...不过,我可以将搜索栏(您键入的位置)的背景颜色更改为白色,这将有助于缓解问题 - 我该怎么做?
  • 不理想,因为背景的性质,但它是一个明确的改进。如果没有找到其他解决方案,我很可能会使用它;谢谢你给我选择。
  • 我的最后一次更新(更新 2)可能有助于将背景保持在您想要的位置。
【解决方案2】:

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

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

【讨论】:

  • 我认为我们的项目不同 - 我正在使用视图控制器作为搜索显示控制器,这可能是导航栏的来源 - 我如何以编程方式将“TopBar”设置为“视图控制器没有'(如在情节提要中)?我无法将导航栏设置为隐藏,因为视图控制器的“NavigationController”返回“null”。
  • @Luke 您如何推送/加载您的搜索视图控制器?我认为您想要的是 NavigationController 的 NavigationBarHidden 属性。
  • 'UIViewController searchResultsViewController = new UIViewController();'和'searchDisplayController = new UISearchDisplayController(tblTask​​Search, searchResultsViewController);' - 就目前而言,我无法设置“NavigationBarHidden”属性,因为“NavigationController”属性返回“null”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 2015-03-07
相关资源
最近更新 更多