Граница для скругленного прямоугольника UIView не распространяется по краям. Xamarin IOS

#swift #xamarin.ios

#swift #xamarin.ios

Вопрос:

Я создал UIView, мне нужно изменить верхний левый и нижний левый угол на закругленные края.Я предоставил цвет и ширину границы. Но граница для более округлого прямоугольника этого пользовательского интерфейса не распространяется по краям.

      view.Frame = new CGRect(0, 0,36,36);
        var maskLayer = new CAShapeLayer();
        maskLayer.Path = UIBezierPath.FromRoundedRect(view.Bounds, (UIRectCorner.TopLeft | UIRectCorner.BottomLeft), new CoreGraphics.CGSize(36.0,36.0)).CGPath;
        maskLayer.Bounds = m_scrollHead.Frame;


        view.Layer.Mask = maskLayer;

        view.Layer.BorderWidth = 1;
        view.Layer.BorderColor = new CoreGraphics.CGColor(0, 0, 0);
  

Комментарии:

1. Сделайте masklayer переменной с глобальным охватом и обновите ее фрейм в методе viewDidLayoutSubviews. Что-то вроде maskLayer.frame = CGRect(источник: .zero, размер: view.bounds.size).

2. Нет, это не работает

Ответ №1:

Вы должны установить borderWidth и borderColor на maskLayer, потому что вид обрезает границу, если вы установите их на layer.

Обратитесь к следующему коду:

 UIView view = new UIView();
view.BackgroundColor = UIColor.Clear;
view.Frame = new CGRect(30, 100, 36, 36);
var maskLayer = new CAShapeLayer();

UIBezierPath bezierPath = UIBezierPath.FromRoundedRect(view.Bounds, (UIRectCorner.TopLeft | UIRectCorner.BottomLeft), new CGSize(18.0, 18.0));


maskLayer.Path = bezierPath.CGPath;
maskLayer.Frame = view.Bounds;

maskLayer.StrokeColor = UIColor.Black.CGColor; //set the borderColor
maskLayer.FillColor = UIColor.Red.CGColor;   //set the background color
maskLayer.LineWidth = 1;  //set the border width

view.Layer.AddSublayer(maskLayer);

View.AddSubview(view);
  

введите описание изображения здесь

Комментарии:

1. Супер братан. Теперь он работает.

2. Удачного кодирования 🙂