【问题标题】:resize UISearchDisplayController dimmed black overlay调整 UISearchDisplayController 变暗的黑色覆盖
【发布时间】:2023-04-03 21:55:02
【问题描述】:

有谁知道点击搜索栏后如何过度调整暗黑色的大小?

当我点击取消时遇到问题,tableview 将消耗然后动画消失。

我用它来调整我的结果表视图的大小。

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
   tableView.frame =fTableView.frame;//CGRectMake(26, 100, 280, 310); //fTableView.frame;
    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1];   
}

点击搜索栏时,灰色叠加层已满,而不是我定义的大小。

当点击取消按钮时,视图将展开。

【问题讨论】:

标签: iphone ios xcode uisearchbar uisearchdisplaycontroller


【解决方案1】:

为了移动变暗的覆盖框,我结合了几个答案。

1:覆盖 UISearchDisplayController 类

@interface MySearchController : UISearchDisplayController

2:覆盖setActive函数

- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
[super setActive: visible animated: animated];

//move the dimming part down
for (UIView *subview in self.searchContentsController.view.subviews) {
    //NSLog(@"%@", NSStringFromClass([subview class]));
    if ([subview isKindOfClass:NSClassFromString(@"UISearchDisplayControllerContainerView")])
    {
        CGRect frame = subview.frame;
        frame.origin.y += 10;
        subview.frame = frame;
    }
}

}

3:将 xib/storyboard 搜索显示控制器从 UISearchDisplayController 更改为 我的搜索控制器

【讨论】:

  • 这是解决此问题的最佳方案。谢谢!
  • App Store 是否批准它进行黑客攻击?
【解决方案2】:

我认为 searchDisplayController 拥有一个单独的 tableview,所以我猜你需要调整它的大小。

类似于:<yourSearchViewController>.view.frame =self.tableView.frame;

或者如果你没有将它作为类变量,在一个接收它作为参数的方法中,例如:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
   controller.view.frame = self.tableView.frame;
    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1];   
}

或者,您可能希望对其进行子类化并在本地覆盖其视图属性。

希望这会有所帮助!

【讨论】:

  • UISearchDisplayController 中没有像 view 这样的东西。您的解决方案出错了。
  • 这表明您应该寻找什么。如果您花几分钟时间查看控制器属性,您会注意到它确实 具有名为“searchResultsTableView”的特定视图。来源:developer.apple.com/library/ios/#documentation/uikit/reference/…
  • 我浏览了控制器的.h 文件,找到了UIView * _view,但它似乎没有暴露。
  • “你应该试试这个,因为这可能会起作用,如果这不起作用,那么试试这个其他的东西”更多的是评论,而不是答案
  • "你可以做 x,或者如果你想正确地做,你可以做 y。"给 op 两个选项。我不完全同意您的评论,但感谢您的反馈。
【解决方案3】:

UISearchDisplayController 确实拥有自己的 tableview,但并不那么容易驯服。 我遇到了这样的事情,并且仍在寻找更好的解决方案。

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    [controller.searchResultsTableView setDelegate:self];   
    CGFloat gr = 12.0;
    controller.searchResultsTableView.backgroundColor = [UIColor colorWithRed:gr green:gr blue:gr alpha:0.0];
    [controller.searchResultsTableView setSeparatorStyle:UITableViewCellSelectionStyleNone];
    CGRect searchTableFrame = CGRectMake(7, 105, 305, 292);
    [controller.searchResultsTableView setFrame:searchTableFrame];
}

上面的代码确实将背景设置为透明,但似乎默默地忽略了帧大小。

编辑:已解决 我找到了这个here 的强大解决方案。 这救了我的命。

【讨论】:

  • 我还使用了自定义单元格来模拟外观,就好像它适合所需的宽度一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 2013-12-24
  • 2017-11-14
  • 2023-04-09
相关资源
最近更新 更多