0

CAGradientLayerのセルを使用してグラデーションを設定しようとしていStyledStringElementます。これは私がこれまでに持っているコードです:

public class DerreckStyledStringElement : StyledStringElement
{
    public DerreckStyledStringElement(string caption) : base(caption) {
    }

    public override UITableViewCell GetCell(UITableView tv)
    {
        var x = base.GetCell(tv);
        CAGradientLayer g = new CAGradientLayer();
        g.Frame = x.Frame;
        g.MasksToBounds = true;
        x.ClipsToBounds = true;
        g.Colors = new MonoTouch.CoreGraphics.CGColor[]
        {
            new UIColor(0f, 153f, 235f, 255f).CGColor,
            new UIColor(0f, 197f, 244f, 255f).CGColor
        };

        UIView bg = new UIView(x.Bounds);
        bg.TranslatesAutoresizingMaskIntoConstraints = true;
        bg.Layer.InsertSublayer(g, 0);
        x.BackgroundView = bg;

        this.TextColor = UIColor.White;
        return x;
    }

}

私がこれをテストしているボタンは、それ自体で座っており、角が丸くなく、右側がデバイスの右端まで伸びている正方形のように見えます。ほとんどの場合、ボタンには正しいように見える左マージンがあるため、画面から少し離れている可能性があります。

What it should look like
|  /---------------------\  |
|  |    BUTTON TEXT      |  |
|  \---------------------/  |

What it looks like
|  |------------------------|
|  |    BUTTON TEXT         |
|  |------------------------|

g.MasksToBounds = true;x.ClipsToBounds = true;、およびを使用した場所はbg.TranslatesAutoresizingMaskIntoConstraints = true;、背景をボタン フレーム自体にクリップする試みでした。

SelectedBackground を変更していないため、タップすると、その周りに正しい角丸長方形のフレームが表示されます。

また、色は正しく見えますが、グラデーションが引き伸ばされているように見えるため、ボタンはグラデーション自体ではなく、グラデーションからの 1 つの色のように見えます。

私は何を間違っていますか?

4

1 に答える 1