Подтвердить что ты не робот

Расширенная граница UIButton изначально не нарисована

Я пытаюсь создать пользовательский UIButton, который простирается от UIButtonType.RoundedRect.

Моя добавленная функциональность работает, но есть проблема с начальным округленным состоянием границы моей кнопки. Граница моей расширенной кнопки не нарисована до тех пор, пока она не будет использована.

Before-After Screenshot

Обновление (24 января 2013 г.): добавлен результат теста красного фона, по просьбе Ричарда Марселла, который заключает только, что нарисован ярлык кнопки. BackgroundColor = UIColor.Red;

Red Background Test, Before-After Screenshot

Ниже приведен мой исходный код для создания моей пользовательской кнопки.

public class TestView : UIView
{
    public TestView(IntPtr p) : base(p) { }

    public TestView(RectangleF bounds)
    {
        Frame = bounds;
        BackgroundColor = UIColor.White;

        UIButton button1 = new UIButton(UIButtonType.RoundedRect);
        button1.Frame = new RectangleF(20,20,100,50);
        button1.SetTitle("Button 1", UIControlState.Normal);
        AddSubview(button1); // Drawn Correctly

        MyButton button2 = new MyButton();
        button2.Frame = new RectangleF(20,90,100,50);
        button2.SetTitle("Button 2", UIControlState.Normal);
        AddSubview(button2); // Only drawn correctly after Tap

        // EDIT: Added to test Miguel theory
        UIButton button3 = UIButton.FromType(UIButtonType.RoundedRect);
        button3.Frame = new RectangleF(20,160,100,50);
        button3.SetTitle("Button 3", UIControlState.Normal);
        AddSubview(button3); // Drawn Correctly
    }
}

public class MyButton : UIButton
{
    public MyButton() : base(UIButtonType.RoundedRect) { }
}
  • Я просто не знаю, как заставить границу правильно рисовать при загрузке представления.
  • Мне не нужна кнопка типа UIButtonType.Custom, так как я не хочу сама стилизовать кнопку.
  • Когда я отлаживаю I, тип MyButton правильно установлен на UIButtonType.RoundedRect.
  • Базовые свойства UIButton MyButton (button2) соответствуют свойствам экземпляра UIButton (кнопка1).

Debug

Как я могу решить эту проблему?


Обновление (31 января 2013 года): Герман Шонфельд предоставил подходящее решение для этой ошибки.

4b9b3361

Ответ 1

Это работает

public class MyButton : UIButton
{
    public MyButton() : base(UIButtonType.RoundedRect) { }


    public override RectangleF Frame {
        get {
            return base.Frame;
        }
        set {
            var temp = TranslatesAutoresizingMaskIntoConstraints;
            TranslatesAutoresizingMaskIntoConstraints = false;
            var constraints = new [] {
                NSLayoutConstraint.Create(this, NSLayoutAttribute.Width, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1.0f, value.Width),
                NSLayoutConstraint.Create(this, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1.0f, value.Height)
            };
            AddConstraints(constraints);
            SizeToFit();
            RemoveConstraints(constraints);
            base.Frame = value;
            TranslatesAutoresizingMaskIntoConstraints = temp;
        }
    }
}

Это только обходной путь, кажется, ошибка. SizeToFit() исправляет проблему, другой код поддерживает фрейм.