2016-03-24 1 views
0

Я добавил subview со своим классом UIView LogoLineView.swift в супервизор ViewController.swift.Безье не видно, когда ограничения добавляются по отношению к другим элементам в супервизии

Внутри моей надтаблицы в моей раскадровке у меня есть 3 элементов пользовательских интерфейса:

  • этикетка с некоторым цветным текстом, чтобы имитировать логотип «Hello World»
  • тогда, у меня подвид около 5 точек в по высоте и по ширине может быть там, где я намерен провести горизонтальную линию, которая наполовину синие и половина красного
  • наконец, у меня есть еще один ярлык только с каким-то серым текстом

enter image description here

Теперь в моем подвид классе (LogoLineView.swift) Я перекрывая DrawRect, как показано ниже:

class LogoLineView: UIView { 

var lineWidth: CGFloat = 0.5 {didSet { setNeedsDisplay() } } 
var blueLineColor: UIColor = UIColor.blueColor() { didSet { setNeedsDisplay() } } 
var redLineColor: UIColor = UIColor.redColor() { didSet { setNeedsDisplay() } } 
var subViewCenter: CGPoint { 
    return convertPoint(center, fromView: superview) 
} 
override func drawRect(rect: CGRect) { 

    var blueLinePath = UIBezierPath() 
    blueLinePath.moveToPoint(subViewCenter) 
    blueLinePath.addLineToPoint(CGPoint(x: bounds.minX, y: bounds.midY)) 
    blueLinePath.lineWidth = lineWidth; 
    blueLineColor.set() 
    blueLinePath.stroke() 
    var redLinePath = UIBezierPath() 
    redLinePath.moveToPoint(subViewCenter) 
    redLinePath.addLineToPoint(CGPoint(x: bounds.maxX, y: bounds.midY)) 
    redLinePath.lineWidth = lineWidth; 
    redLineColor.set() 
    redLinePath.stroke() 
} 

}

Проблема, которую я имею что когда я добавить ограничения на subview по отношению к другим элементам в супервизе, моя нарисованная линия не видна.

enter image description here

Однако, если удалить все остальные элементы в моей надтаблице и оставить только подвид, то я могу видеть мою линию, проведенную именно так, как я хочу. enter image description here

Я хочу, чтобы моя линия была нарисована между текстом «Hello World» и текстом «Это мой первый раз, используя Core Graphics и Bezier Paths». И я хочу, чтобы эта строка была способна адаптироваться к любому размеру экрана.

Ограничения, которые я использую ниже:

  • "Hello World" ограничения: enter image description here
  • подвид рисовать ограничения линии: enter image description here
  • серый текст «Это мой первый раз, используя сердечник Графика и Безье ": enter image description here

Не могли бы вы помочь мне найти то, чего не хватает? Я очень новичок в использовании Core Graphics и Bezier Paths. Спасибо.

+0

Работает ли он, если вы меняете 'lineWidth' на' 1' или '2'? Является ли ваш симулятор увеличенным до 100%? –

ответ

1

Вид, на который вы рисуете свою линию, рухнул системой автоматической компоновки. Причина, по которой ваши текстовые представления не сворачиваются, заключается в том, что они имеют внутреннюю высоту. Дайте вашей линии просмотр фиксированного ограничения по высоте или переопределите intrinsicContentSize() в вашем подклассе вида, чтобы этот вид имел собственный размер.

+0

Я не уверен, что это так. Если бы существовало двусмысленное ограничение, разве не было бы видимого предупреждения? Кроме того, ограничения ширины кажутся прекрасными, и если «clipToBounds» не включен, он должен провести линию за пределами своих границ, правильно? –

+0

Ограничение не является двусмысленным.Система макета определила, что наличие вида с нулевой высотой однозначно удовлетворяет ограничению. Если вы хотите убедиться, что это так, вы можете использовать автоматический макет процедур отладки, чтобы выгрузить размер представлений в макете и убедиться, что линия имеет нулевую высоту. Что касается ваших ограничений отсечения, я должен был бы сделать некоторые эксперименты с нулевыми представлениями высоты, чтобы сказать. –

+0

Спасибо! добавив ограничение по высоте в 1, я исправил свою проблему. Я проверил, и если я снова удалю ограничение высоты 1, я вижу 2 предупреждения. (1) Вертикальное положение неоднозначно для «это мой первый раз ....» (2) Высота неоднозначна для «Просмотр линии логотипа». Большой контроль с моей стороны, поэтому я ценю помощь, мне потребовались бы дни, чтобы понять это самостоятельно. – Jace

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

  • Нет связанных вопросов^_^