0

UIScrollView に 7 つの UIButton があります。上位 3 つの UIButton は、コード内の if ステートメントに応じて非表示または表示にできます。つまり、3 つの UIButton が表示される可能性は 8 つあります。私が抱えている問題は、UIScrollView のコンテンツ サイズを調整して、「空の」スペースがないようにすることです。たとえば、中央の UIButton が非表示になっているが、その上下の UIButton が表示されている場合、空のスペースが残っています。スクロールビューですべてのボタンを隙間なく上下に合わせる方法はありますか?

このコードを試しましたが、うまくいきませんでした:

if([[facilities objectAtIndex:0]intValue] == 1) {

        facilitiesButton.hidden = NO;



    }

    if([[ListingsEnabled objectAtIndex:0]intValue]==1) {

        ListingsBtn.hidden = NO;
    } 

    if([[OffersEnabled objectAtIndex:0]intValue]==1) {

        OffersBtn.hidden = NO;
    }

    CGFloat scrollViewHeight = 0.0f;
    self.DetailScrollView.showsHorizontalScrollIndicator = NO;       
    self.DetailScrollView.showsVerticalScrollIndicator = NO;
    for (UIView* view in self.DetailScrollView.subviews)
    {
        if (!view.hidden)
        {
            CGFloat y = view.frame.origin.y;
            CGFloat h = view.frame.size.height;
            if (y + h > scrollViewHeight)
            {
                scrollViewHeight = h + y;
            }
        }
    }
    self.DetailScrollView.showsHorizontalScrollIndicator = YES;
    self.DetailScrollView.showsVerticalScrollIndicator = YES;

    [self.DetailScrollView setContentSize:(CGSizeMake(self.DetailScrollView.frame.size.width, scrollViewHeight))];
4

1 に答える 1

1

@Andyがコメントしたように、スクロールビューのサイズを変更するだけでなく、実際のボタンを配置する必要があります。テーブルビューは確かに良い方法かもしれませんが、7 つのボタンの場合はやり過ぎかもしれません。ボタンをループし、可視性に基づいてボタンの位置を更新するスニペットを次に示します。必要がないように見えるのでスクロール ビューを省略しましたが、更新されるスクロール ビューでそれらが必要な場合は、コードを編集できます。お知らせください。

/////////////////////
///// USES ARC //////
/////////////////////

- (void)viewDidLoad
{
    [super viewDidLoad];

    allButtons = [NSMutableArray array];

    // Create 7 buttons and randomly hide some
    for (int i = 0; i < 7; i++)
    {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
        button.frame = CGRectMake(0, 0, 100, 50);
        [button setTitle:[NSString stringWithFormat:@"Button %i", i+1] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(randomizeButtons:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];

        button.hidden = arc4random_uniform(2)-1 > 0;

        [allButtons addObject:button];
    }

    [self updateButtonLayout];
}

-(void)updateButtonLayout
{
    // position buttons based on visiblity

    CGRect lastButtonFrame = CGRectMake(0, 0, 0, 0);
    int verticalPadding = 10;

    for(UIButton *btn in allButtons)
    {
        if(!btn.hidden)
        {
            btn.frame = CGRectMake(lastButtonFrame.origin.x, lastButtonFrame.origin.y+lastButtonFrame.size.height+verticalPadding, btn.frame.size.width, btn.frame.size.height);

            lastButtonFrame = btn.frame;
        }
    }
}

-(void)randomizeButtons:(UIButton *)btn
{
    // Randomize the visiblity of the buttons and update the interface

    for(UIButton *btn in allButtons)
    {
        btn.hidden = arc4random_uniform(2)-1 > 0;
    }

    [self updateButtonLayout];
}
于 2012-08-09T13:52:49.520 に答える