移除UISearchBar下方的1像素边框。

43

UISearchBar 1px黑色边框

我遇到了问题,无法直接移除 UISearchBar 视图下方的 1px 边框。现在它看起来与我的“完成”按钮视图不匹配。我尝试过:

searchBar.layer.borderWidth = 0;
searchBar.layer.shadowOpacity = 0;

但是似乎那并没有起作用。有什么想法吗?


也许这是设计的一部分? - apscience
4个回答

94

没事了,我刚刚已经做了:

searchBar.layer.borderWidth = 1;
searchBar.layer.borderColor = [[UIColor whiteColor] CGColor];

它可行了!


1
这对我不起作用。当我尝试在searchBar.layer后使用自动完成时,我没有得到任何选项。有什么想法为什么会这样? - budiDino
3
好的,我必须这样做:#import <QuartzCore/QuartzCore.h> - budiDino
它能够工作的唯一原因是你将边框颜色设置为了视图的背景颜色。但这是我目前找到的最好的解决方案。 - testing
可以用,iOS 8!谢谢!好主意!=) - Nubaslon
对我来说可以工作,但我必须将它放在viewWillAppear方法中。 - jmartinalonso
2
为了匹配背景色,搜索栏的边框颜色应该设置为 searchBar.barTintColor.CGColor。 - bisma

52
[searchBar setBackgroundImage:[UIImage new]];

1
我认为这是一个iOS 7+的解决方案,正是我所需要的。谢谢! - rob5408
这取决于您使用的背景颜色。 - testing

25

针对iOS9测试的Swift版本:

searchBar.backgroundImage = UIImage() 

它将显示如下:

no-border-result


我花了将近4个小时,最终找到了一个完美的解决方案。谢谢。 - Umair_UAS
仍然适用于iOS 15和Swift 5。 - Underdog

4
为了在 Xamarin Forms 中解决这个问题,您需要为 SearchBar 类创建一个 CustomRenderer。 像这样:CustomRenderer
using System;
using Xamarin.Forms.Platform.iOS;
using Xamarin.Forms;
using MyProject.iOS;

[assembly: ExportRenderer(typeof(SearchBar), typeof(CustomSearchBarRenderer))]
namespace MyProject.iOS
{
    public class CustomSearchBarRenderer:SearchBarRenderer
    {
        protected override void OnElementChanged (ElementChangedEventArgs<Xamarin.Forms.SearchBar> e)
        {
            base.OnElementChanged (e);
            if (this.Control == null) return;

            this.Control.BackgroundImage = new UIKit.UIImage ();
        }
    }
}

2
你能解释一下这是如何工作的,以及为什么更简单的答案不够好吗? - meneldal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接