为什么更改UISearchBar的框架根本不起作用

时间:2014-02-13 07:42:55

标签: objective-c cocoa-touch uisearchbar

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.它不应该在中间结束。

然而,这是截图

enter image description here

如果我为动作制作动画,它似乎实际上会改变大小。然而,它慢慢回归。有些东西让它恢复原来的大小。

我收到了这个错误:

  

无效的上下文0x0。这是一个严重的错误。这个应用程序,或者   它使用的库,正在使用无效的上下文,从而   导致系统稳定性的整体恶化   可靠性。此通知是礼貌的:请解决此问题。它   将在即将到来的更新中成为致命错误。

2 个答案:

答案 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];无论如何总是被召唤:(