CGRect rectSearchLocationFrame=self.rectsearchLocation;
CGRect rectSearchCityFrame = self.rectsearchCity;
rectSearchLocationFrame.size.width += change *changeByMuch;
rectSearchCityFrame.size.width -= change * changeByMuch;
rectSearchCityFrame.origin.x +=change*changeByMuch;
self.searchLocation.frame = rectSearchLocationFrame;
self.searchCity.frame = rectSearchCityFrame;
PO1(self.searchLocation.textField);
PO1(self.searchCity.textField);
//NSAssert(false, @"Hello");
我仔细看。 self.searchLocation确实改变了框架
(lldb) po self.searchLocation
<BGSearchBar: 0x158e5130; baseClass = UISearchBar; frame = (0 38; 260 44); text = ''; opaque = NO; autoresize = W+BM; gestureRecognizers = <NSArray: 0x158d1ba0>; layer = <CALayer: 0x158e5220>>
你看,框架?那里的宽度是260,而不是160.它不应该在中间结束。
然而,这是截图
如果我为动作制作动画,它似乎实际上会改变大小。然而,它慢慢回归。有些东西让它恢复原来的大小。
我收到了这个错误:
无效的上下文0x0。这是一个严重的错误。这个应用程序,或者 它使用的库,正在使用无效的上下文,从而 导致系统稳定性的整体恶化 可靠性。此通知是礼貌的:请解决此问题。它 将在即将到来的更新中成为致命错误。
答案 0 :(得分:0)
试试这个
[UIView beginAnimations:nil context:nil];
<duration of animation>
<change frame of your search bar>
[UIView commitAnimations];
或
[UIView
animateWithDuration:0.1
animations:^{
<change frame of your search bar>
}
completion:^(BOOL finished) {
}];
答案 1 :(得分:0)
-(void) setActiveSearchBar:(BGSearchBar *)activeSearchBar
{
_activeSearchBar=activeSearchBar;
AssertMainThread
if (activeSearchBar==self.searchLocation)
{
[self vChangeFrameBy:1];
}
else if (activeSearchBar==self.searchCity)
{
[self vChangeFrameBy:-1];
}
else if (activeSearchBar==self.searchBusiness)
{
[self vChangeFrameBy:0];
}
}
我犯了一个愚蠢的错误
查看上面的代码。有一个额外的;如果
,则在最后一个之后的原始代码上所以最后的其他如果是这样的:
else if (activeSearchBar==self.searchBusiness);
{
[self vChangeFrameBy:0];
}
这意味着[self vChangeFrameBy:0];无论如何总是被召唤:(