在IOS 11

时间:2017-10-26 21:18:23

标签: ios objective-c

我有以下代码,这是它的一部分, 应该设置一个工具栏,并在屏幕上 旋转它将其删除,调整搜索框的大小 然后显示它,除非它没有正确调整大小......

(我找不到它赢得调整大小,框架调整大小的原因)

搜索的左侧和右侧还有其他按钮 被定义为 UIBarButtonSystemItemFlexibleSpace和UIBarButtonItemStylePlain, "应该"搜索栏调整大小时自动重新定位...

所有这些都是在没有故事板的情况下完成的,以编程方式完成。

in loadView:

    LtoolBar = [[UIToolbar alloc] init];
    LsearchBox = [[UISearchBar alloc] init];
    LsearchBox.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    LsearchBox.delegate = self;
    LsearchContainer = [UIView new];
    [LsearchContainer addSubview:LsearchBox];
    LbtnSearchBox = [[UIBarButtonItem alloc] initWithCustomView:LsearchContainer];
    [LtoolBar setItems:[NSArray arrayWithObjects: LbtnSearchBox, nil] animated:NO];

in viewDidLoad I add the toolbar (see rotate below)
     [self.view addSubview:LtoolBar];

in willRotateToInterfaceOrientation:

        [LtoolBar removeFromSuperview];

in didRotateFromInterfaceOrientation:

if (UIInterfaceOrientationIsPortrait(fromInterfaceOrientation))
    CGRect bounds = CGRectMake(0, 0, 280, 30);
if (UIInterfaceOrientationIsLandscape(fromInterfaceOrientation))
    CGRect bounds = CGRectMake(0, 0, 360, 30);

    [LsearchContainer setFrame:bounds];
    [self.view addSubview:LtoolBar];
    [LtoolBar sizeToFit];

感谢您的帮助!

更新1:

我能够通过在最后一行之后添加调整大小动画来解决这个问题 取决于框架是280还是360并将其设置为尺寸+ 1 ...

可怕的黑客,但它调整了搜索栏的大小......

[UIView animateWithDuration:0 delay:0 options:UIViewAnimationOptionLayoutSubviews
     animations:^{ [LsearchContainer setFrame:CGRectMake(0, 0, 281, 30)]; } completion:nil];

我仍然想知道如何在没有黑客的情况下修复它......

更新2:

而不是动画,这也解决了问题:

    [LsearchBox removeFromSuperview];
    [LsearchContainer addSubview:LsearchBox];

有更好的方法吗?

0 个答案:

没有答案