2016-10-16 1 views
1

Я создал CAShapeLayer границу для просмотра с использованием код ниже:Как настроить границу UIBezierPath для просмотра в ios?

func addBorderToWebView() { 
    borderShape = CAShapeLayer() 
    borderShape.path = UIBezierPath(rect: webView.frame).cgPath 
    borderShape.lineWidth = CGFloat(2) 
    borderShape.bounds = borderShape.path!.boundingBox 
    borderShape.strokeColor = UIColor(red: 68/255, green: 219/255, blue: 94/255, alpha: 1.0).cgColor 
    borderShape.position = CGPoint(x: borderShape.bounds.width/2, y: borderShape.bounds.height/2) 
    webView.layer.addSublayer(borderShape) 
} 

I правая и нижняя границы линии из кадра, вы можете увидеть его на изображении ниже. Однако, если я определяю borderWidth свойство webView.layer, все, кажется, хорошо видно. Вот почему я делаю вывод, что проблема заключается не в ограничениях макета. Как мне настроить UIBezierPath (или CAShapeLayer), чтобы обеспечить правильную индикацию границы? Спасибо за любую помощь!

CAShapeLayer border

+0

Каким образом 'htmlPreviewer' связан с' webView' с точки зрения иерархии представлений? Где вы называете метод «addBorderToWebView»? – alexburtnik

+0

@alexburtnik О, извините, я переименовал 'htmlPreviewer' в' webView' для вопроса, чтобы сделать его более понятным. Забыл переименовать этот. Починил это! – D3migod

+0

Итак, как вы называете этот метод? – alexburtnik

ответ

1

Попробуйте заменить этот

borderShape.path = UIBezierPath(rect: webView.frame).cgPath 

с этим:

borderShape.path = UIBezierPath(rect: webView.bounds).cgPath 

Другая возможная причина проблемы заключается в том, что webView «s кадр еще не обновляется, когда вы установите его до borderShape. Вы можете попробовать сделать self.view.updateLayoutIfNeeded() перед добавлением формы рамки. Если это не помогает переопределить следующий метод:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    updateBorderShape() 
} 

func updateBorderShape() { 
    borderShape.bounds = webView.bounds 
    borderShape.position = CGPoint(x: borderShape.bounds.width/2, y: borderShape.bounds.height/2) 
} 

Это позволит убедиться, что каждый раз, когда ваши кадры обновляются, бордюр форма также обновляется.

+0

Нет, не работает, все по-прежнему то же самое. – D3migod

+0

Проверьте обновленный ответ, он должен исправить проблему. – alexburtnik

Смежные вопросы