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++;
        }
    }
}

问题是按钮被涂成红色,但框架集被忽略,而不是在一行中排列,它们被放在另一行下方并超出警报框架。

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 回答