0

Xamarin のレシピの 1 つに従いました (ここにあります: http://docs.xamarin.com/recipes/ios/standard_controls/popovers/display_a_loading_message ) が、アクティビティ スピナーを使用する代わりに UIButton を追加したいと考えました。アクティビティ スピナーを下塗りし、次の UIView クラスが残っていますが、ビューをロードするとボタンがロード/表示されませんが、追加したラベルは表示されます。何か案は?

ソースコード:

public class testOverlay : UIView {

    UIButton buttonRect;
    UILabel testLabel;

    public testOverlay (RectangleF frame) : base (frame)
    {
        // configurable bits
        BackgroundColor = UIColor.Black;
        Alpha = 0.75f;
        AutoresizingMask = UIViewAutoresizing.FlexibleDimensions;

        float labelHeight = 22;
        float labelWidth = Frame.Width - 20;

        // derive the center x and y
        float centerX = Frame.Width / 2;
        float centerY = Frame.Height / 2;

        // create the activity spinner, center it horizontall and put it 5     points above center x
        buttonRect = UIButton.FromType(UIButtonType.RoundedRect);
        buttonRect.SetTitle ("Confirm", UIControlState.Normal);
                    buttonRect.Frame = new RectangleF (
            centerX - (buttonRect.Frame.Width / 2) ,
            centerY - buttonRect.Frame.Height - 20 ,
            buttonRect.Frame.Width ,
            buttonRect.Frame.Height);
        buttonRect.AutoresizingMask = UIViewAutoresizing.FlexibleMargins;
        AddSubview (buttonRect);

        // create and configure the "Loading Data" label
        testLabel = new UILabel(new RectangleF (
            centerX - (labelWidth / 2),
            centerY + 20 ,
            labelWidth ,
            labelHeight
            ));
        testLabel.BackgroundColor = UIColor.Clear;
        testLabel.TextColor = UIColor.White;
        testLabel.Text = "Loading...";
        testLabel.AutoresizingMask = UIViewAutoresizing.FlexibleMargins;
        AddSubview (testLabel);
    }

    /// <summary>
    /// Fades out the control and then removes it from the super view
    /// </summary>
    public void Hide ()
    {
        UIView.Animate (
            0.5, // duration
            () => { Alpha = 0; },
        () => { RemoveFromSuperview(); }
        );
    }
};

ありがとう

4

2 に答える 2

1

あなたの問題は、コードのこの部分にあります:

buttonRect.Frame = new RectangleF (
    centerX - (buttonRect.Frame.Width / 2) ,
    centerY - buttonRect.Frame.Height - 20 ,
    buttonRect.Frame.Width ,
    buttonRect.Frame.Height);

ボタンのフレームが設定される前に、そのフレームの x、y、幅、および高さを設定しています。

コードを次のように変更すると、問題が修正されます。

var buttonWidth = 100;
var buttonHeight = 50;
buttonRect.Frame = new RectangleF (
    centerX - buttonWidth / 2 ,
    centerY - buttonHeight - 20 ,
    buttonWidth ,
    buttonHeight);
于 2013-08-21T20:38:04.627 に答える
0

UILabel のフレームを指定しましたが、UIButton は指定しませんでした。ビュー内の要素が表示される場所を決定するには、フレームを指定する必要があります。

于 2013-08-20T12:43:30.883 に答える