美文网首页
iOS11后设置UISearchBar占位符居中

iOS11后设置UISearchBar占位符居中

作者: Hsusue | 来源:发表于2018-05-20 16:58 被阅读856次

iOS11.0后UISearchBar默认不居中了。参考了这篇文章,封装了一个控件。

直接上效果图。

效果图

先来看看iOS11后系统自带的UISearchBar。

textField后面的颜色太丑了,大多数App都会改掉。粗暴的我直接给删去了。

for (UIView *subView in self.subviews) {          

     if ([subView isKindOfClass:[UIView  class]]) {               

        [[subView.subviews objectAtIndex:0] removeFromSuperview];           

    }       

}

删去后发现背景色变透明。

设置了背景色后圆角怎么不见了???

真是奇奇怪怪。只能设置一下了。

self.textField.backgroundColor = [UIColor whiteColor];   

self.textField.borderStyle = UITextBorderStyleNone;    self.textField.layer.cornerRadius = 5.0f;   

self.textField.layer.masksToBounds = YES;


做完这些后就进入最重要的居中步骤了。

原理是设置 setPositionAdjustment,让textField和searchBar左边偏移。

距离:placeHolder宽度 + icon宽度 + 它们之间的间隙

- (CGFloat)placeholderWidth {   

    if (!_placeholderWidth) {       

        CGSize size = [self.placeholder boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:placeHolderFont]} context:nil].size;       

        _placeholderWidth = size.width + iconSpacing + searchIconW;   

    }   

    return _placeholderWidth;

}

然后在textField的代理方法里设置偏移

// 开始编辑的时候重置为靠左

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {   

    // 继续传递代理方法   

    if ([self.delegate respondsToSelector:@selector(searchBarShouldBeginEditing:)]) {       

    [self.delegate searchBarShouldBeginEditing:self];   

    }   

    if (@available(iOS 11.0, *)) {       

    [self setPositionAdjustment:UIOffsetZero forSearchBarIcon:UISearchBarIconSearch];   

    }   

    return YES;

}    

// 结束编辑的时候设置为居中

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {   

    if ([self.delegate respondsToSelector:@selector(searchBarShouldEndEditing:)]) {       

        [self.delegate searchBarShouldEndEditing:self];   

    }    // 没输入文字时占位符居中   

    if (textField.text.length == 0) {       

        if (@available(iOS 11.0, *)) {           

    [self setPositionAdjustment:UIOffsetMake((textField.frame.size.width - self.placeholderWidth) / 2, 0) forSearchBarIcon:UISearchBarIconSearch];     

         }   

    }   

    return YES;

}

设置完发现icon和textField离得很近。

在iOS10运行却不会

加上这句代码就隔开了。

        self.searchTextPositionAdjustment = UIOffsetMake(iconSpacing,0);

或者注释掉也能隔开。

        self.textField.borderStyle = UITextBorderStyleNone;   

最后附上代码

如果发现了什么问题,欢迎在评论区22。

相关文章

  • iOS11后设置UISearchBar占位符居中

    iOS11.0后UISearchBar默认不居中了。参考了这篇文章,封装了一个控件。 直接上效果图。 先来看看iO...

  • iOS11-UISearchBar居中placeholder和i

    UISearchBar在ios11上的placeHolder和icon默认居左了。。。 下面是实现的居中的效果: ...

  • iOS自定义搜索框,居中显示放大镜以及提示性文字

    iOS11之前,苹果自带的UISearchBar中提示性文字和放大镜是默认居中显示的,但是升级到iOS11之后这个...

  • iOS中更改UISearchBar占位符居左

    UISearchBar的占位符 (Placeholder) 如何居左显示 ? 做项目的时候遇到这个问题,虽然不是什...

  • java 中#{}与${}的区别

    #{}: 表示一个占位符号,实现向PreparedStatement占位符中设置值(#{}表示一个占位符?),自动...

  • 莹莹

    占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符...

  • 莹莹

    占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符...

  • iOS开发UITextField

    设置占位符颜色 设置消息中心,监听值的改变

  • iOS 自定义UITextField placeholder文字

    一、简单设置 placeholder,输入框的占位符,其文字可以直接设置tf.placeholder = @"占位...

  • 及时止损哪有那么容易

    占位符占位符占位符占位符占位符占位符占位符占位符占位符占位符 晚上清理微博时,发现了我以前发的微博 心情如同标题 ...

网友评论

      本文标题:iOS11后设置UISearchBar占位符居中

      本文链接:https://www.haomeiwen.com/subject/xdstjftx.html