0

アプリで SBTableAlert ライブラリを使用していましたが、iOS 7 ではこのライブラリが機能しません。TSAlertView を追加して修正すると、ダイアログが正常に表示されます。しかし、私の問題は、ボタンの位置が本来あるべき位置にないことです。

ボタンの位置を次のように設定します。

-(void)willPresentTableAlert:(SBTableAlert *)tableAlert{
    int counter = 0;
    for (id view_sub in self.filterAlert.view.subviews) {
        if ([view_sub isKindOfClass:[UIButton class]]) {
            switch (counter) {
                case 0:
                    ((UIButton*)view_sub).frame = CGRectMake(10,
                                                       10,
                                                       144,
                                                       44);
                    ((UIButton*)view_sub).backgroundColor = [UIColor redColor];
                    break;
                case 1:
                    ((UIButton*)view_sub).frame = CGRectMake(169,
                                                                     150,
                                                                     144,
                                                                     44);
                    break;
                case 2:
                    ((UIButton*)view_sub).frame = CGRectMake(328,
                                                                     150,
                                                                     144,
                                                                     44);
                    break;

                default:
                    break;
            }
            counter++;
        }
    }
}

ボタンは赤く塗られていますが、フレーム セットは無視されます。1 行に並べる代わりに、ボタンを 1 つ下に配置し、アラート フレームから外します。

4

1 に答える 1

0

私はついに答えを見つけました。問題は TSAlertVeiw ライブラリにありました。これには、最後に呼び出される関数 recalcSizeAndLayout:layout があり、ボタンのカスタム位置を上書きするためです。

解決策は、TSAlertView に新しい BOOL 変数を追加しcustomLayoutOfButton、ボタンを自動レイアウトする前に確認することでした。

if (!self.customLayoutOfButton) {
        CGFloat buttonHeight = [[self.buttons objectAtIndex:0] sizeThatFits: CGSizeZero].height;
        if ( stacked )
        {
            CGFloat buttonWidth = maxWidth;
            for ( UIButton* b in self.buttons )
            {
                b.frame = CGRectMake( kTSAlertView_LeftMargin, y, buttonWidth, buttonHeight );
                y += buttonHeight + kTSAlertView_RowMargin;
            }

        }
        else
        {
            CGFloat buttonWidth = (maxWidth - kTSAlertView_ColumnMargin) / 2.0;
            CGFloat x = kTSAlertView_LeftMargin;
            for ( UIButton* b in self.buttons )
            {
                b.frame = CGRectMake( x, y, buttonWidth, buttonHeight );
                x += buttonWidth + kTSAlertView_ColumnMargin;
            }
        }
}
于 2013-10-11T05:30:40.063 に答える