1

スクロールビュー (セグメント コントロールによってトリガーされる) 内の 2 つのセクション (ビュー) の間で可視性を切り替えようとしていますが、非表示の要素があった場所にギャップを作りたくないのです。

現在私がやっていることはViewDidAppear、2 つのビュー フレームを保存していて、ビューの可視性を切り替える必要があるときに、フレームを非表示にするビューを設定し、もう一方のビューを「トップ」に移動することCGRecZeroですフレームを初期フレームに設定し、origin.y プロパティを変更して位置を調整します。問題は、スクロールするとすぐにビューのフレームがリセットされたように見え、ギャップが残ることです。

これが私のコードの例です

if (control.selectedSegmentIndex == 0) {
    [self.firstView setHidden:YES];
    [self.firstView setFrame:CGRectZero];
    [self.secondView setHidden:NO];
    CGRect frmTmp = secondViewRec;
    frmTmp.origin.y = orgPoint.y;
    [self.secondView setFrame:frmTmp];

} else {
    [self.secondView setHidden:YES];
    self.secondView.frame = CGRectZero;
    [self.firstView setHidden:NO];
    CGRect frmTmp = firstViewRec;
    firstViewRec.origin.y = orgPoint.y;

    self.firstView.frame = frmTmp;
}

私はスクロールビューを直接使用するつもりはありません。また、静的UITableViewを使用してセルを非表示にしようとしましたが、インターフェイスにギャップが残っていたため、このアプローチを試みています。助言がありますか?これを実装する簡単な方法はありますか?

4

1 に答える 1

1

私がこれを解決した方法は、親ビューからビューを添付および削除することです。私の親ビューはスクロールビューです。これが私のコードのハッキングされたコピーペーストです:

#define LIST_BUTTON_INDEX      0
#define LOCATION_BUTTON_INDEX  1
#define ACTIVITIES_DETAIL_MODE_DETAILS   0
#define ACTIVITIES_DETAIL_MODE_MAP       1

-(void)detailsButtonPressed:(id)sender
{
    [self selectButton:LIST_BUTTON_INDEX];   // change the segment control
    [self displayView:ACTIVITIES_DETAIL_MODE_DETAILS];
}
-(void)mapButtonPressed:(id)sender
{
    [self selectButton:LOCATION_BUTTON_INDEX];  // change the segment control
    [self displayView:ACTIVITIES_DETAIL_MODE_MAP];
}


-(void) displayView:(int)displayMode
{
    self.mode = displayMode;

    switch (self.mode)
    {
        case ACTIVITIES_DETAIL_MODE_DETAILS:
        {
            [self clearScrollViewSubviews];

            self.detailsController = [[ActivityDetailsView alloc] initWithNibName:@"ActivityDetailsView" bundle:[NSBundle mainBundle]];
            [self.scrollView addSubview:self.detailsController.view];
            CGRect f = self.detailsController.view.frame;
            f.size.height  -= 20;
            self.scrollView.contentSize = f.size;
        }
        break;

        case ACTIVITIES_DETAIL_MODE_MAP:
        {
            [self clearScrollViewSubviews];
            self.mapController = [[ActivityMap alloc] initWithNibName:@"ActivityDetailsLocationView" bundle:[NSBundle mainBundle]];
            [self.scrollView addSubview:self.mapController.view];
            CGRect f = self.mapController.view.frame;
            f.size.height  -= 20;
            self.scrollView.contentSize = f.size;
        }
        break;
    }

}
-(void)clearScrollViewSubviews
{
    if(self.detailsController != nil)
    {
        [self.detailsController.view removeFromSuperview];
    }
    if(self.mapController != nil)
    {
        [self.mapController.view removeFromSuperview];
    }
}
于 2013-02-12T22:49:37.160 に答える