回答在座的一个老问题,但我用这一个我最近挣扎,发现了一些不足之处与其他答案的情况下,我试图解决的问题。这里是我在UISearchBar的子类中做的:
首先添加一个UIButton属性(这里是“selectButton”)。然后覆盖initWithFrame方法和做类似下面的内容:
-(id)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame])
{
self.selectButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.selectButton.contentEdgeInsets = (UIEdgeInsets){.left=4,.right=4};
[self.selectButton addTarget:self action:@selector(pressedButton:) forControlEvents:UIControlEventTouchUpInside];
self.selectButton.titleLabel.numberOfLines = 1;
self.selectButton.titleLabel.adjustsFontSizeToFitWidth = YES;
self.selectButton.titleLabel.lineBreakMode = UILineBreakModeClip;
[self addSubview:self.selectButton];
[self.selectButton setFrame:CGRectMake(5, 6, 60, 31)];
}
return self;
}
现在要覆盖布局子视图的方法来搜索栏调整到合适的宽度,这取决于取消按钮是否被显示。应该看起来像这样:
-(void)layoutSubviews
{
[super layoutSubviews];
float cancelButtonWidth = 65.0;
UITextField *searchField = [self.subviews objectAtIndex:1];
if (self.showsCancelButton == YES)
[searchField setFrame:CGRectMake(70, 6, self.frame.size.width - 70 - cancelButtonWidth, 31)];
else
[searchField setFrame:CGRectMake(70, 6, self.frame.size.width - 70, 31)];
}
请注意,在上面的方法中,我为cancelButtonWidth添加了一个常量。我试图添加代码来获取[self cancelButton]的宽度,但似乎只能在运行时访问,并且不允许项目编译。在任何情况下,这应该是您需要的良好开端
的权利雨燕3.0的版本:[发布7203924(https://stackoverflow.com/a/44621016/7203924) – 2017-06-19 02:03:43