我想要在用户点按按钮时显示UISearchBar。在buttonPress方法中,我创建了searchBar并将其添加为子视图,然后调用[searchBar becomeFirstResponder]
。如果我取出这个yesFirstResponder调用,搜索图标和占位符文本将出现在textField的中心。
然后,当搜索栏成为第一响应者时,两个动画都是左对齐的。
因为我正在连续做两个动作,所以我得到了一个奇怪的动画,其中图标&占位符动画来自(0,0)。
如何禁用此动画,以便我可以简单地将第二张图像添加到我的视图中?
修改
我使用
正确显示了占位符文本- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[searchBar setPlaceholder:@"Type Here to Search"];
}
我可以使用[searchBar setPositionAdjustment:UIOffsetMake(x, y) forSearchBarIcon:UISearchBarIconSearch];
移动搜索图标,但更改仍会在动画中应用。
答案 0 :(得分:1)
@ user3429963绝对是looking正确的方向。这对我有用:
removeLayerAnimationsRecursively()
其中extension UIView {
func removeLayerAnimationsRecursively() {
layer.removeAllAnimations()
subviews.forEach { $0.removeLayerAnimationsRecursively() }
}
}
是一个从视图图层及其子视图中删除动画的函数。层递归:
<!-- Base application theme. -->
<style name="TransparentTheme" parent="android:Theme.Holo.Light">
<!-- Customize your theme here. -->
<item name="android:windowBackground">@null</item>
<item name="android:actionBarStyle">@style/ActionBarStyle.Transparent</item>
<item name="android:windowActionBarOverlay">true</item>
</style>
<style name="ActionBarStyle.Transparent" parent="android:Widget.ActionBar">
<item name="android:background">@null</item>
<item name="android:displayOptions">showHome|showTitle</item>
<item name="android:titleTextStyle">@style/ActionBarStyle.Transparent.TitleTextStyle</item>
</style>
<style name="ActionBarStyle.Transparent.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">@android:color/white</item>
</style>
答案 1 :(得分:0)
这是一个黑客,但如果你不能没有它。
编辑:如果你也想要占位符文本,你可以这样做。
最初将占位符文本设置为@“”,然后
[self.searchBar setText:@"Place holder"];
[self.searchBar setPlaceholder:@"Place holder"];
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor grayColor]];
在它成为第一个响应者后,
[self.searchBar setText:@""];
答案 2 :(得分:0)
占位符末尾的某些空格为我解决了这个问题。注意,它应该是准确的空格数 - 不能少而不是更多。
答案 3 :(得分:0)
使用此代码隐藏搜索栏的图标: -
[searchBar setImage:[UIImage imageNamed:@"searchIcon.jpg"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
使用searchIcon.jpg名称拍摄透明图像,并隐藏图标 它为我工作
[searchBar setText:@""];
答案 4 :(得分:0)
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIView.setAnimationsEnabled(false)
self.searchController?.isActive = true
self.searchController?.searchBar.becomeFirstResponder()
}
func didPresentSearchController(_ searchController: UISearchController) {
searchController.searchBar.becomeFirstResponder()
UIView.setAnimationsEnabled(true)
}
答案 5 :(得分:-1)
它适用于我(仅在ios7上测试)
@interface SearchBar : UISearchBar
@end
@implementation SearchBar
- (void)layoutSubviews
{
[super layoutSubviews];
UITextField *textField = (UITextField *)[self firstSubviewOfClass:[UITextField class]];
UIImageView *imageView = (UIImageView *)[textField firstSubviewMatchingBlock:^BOOL(UIView *obj) {
return [obj isKindOfClass:[UIImageView class]] && obj.layer.animationKeys.count;
}];
[imageView.layer removeAllAnimations];
UILabel *label = (UILabel *)[self firstSubviewOfClass:[UILabel class]];
[label.layer removeAllAnimations];
}
@end