Растяжение части UIView с помощью contentStretch - PullRequest
1 голос
/ 22 февраля 2012

Мне нужна помощь в понимании использования свойства contentStretch в UIView.Я был бы признателен, 1) некоторые рекомендации о том, как добиться эффекта, к которому я стремлюсь, и 2) ссылка на любую исчерпывающую документацию о том, как использовать это свойство.Хотя я думал, что понимаю документацию Apple, теперь я вижу, что не понимаю.Вот что я пытаюсь сделать.

У меня есть пользовательский UIView, который отображает вид, похожий на рисунок a.ниже.Метод drawRect этого UIView окрашивает внутреннее поле слева (с закругленными углами и белым фоном) другим цветом и эффектом, отличным от того, который используется для остальной части вида.Кроме того, 4 угла UIView не растягиваются (это может привести к искажению), поэтому мне нужно растянуть только центр фона UIView.

Я хочу увеличить это представление до формы, подобной изображеннойна рисунке б.ниже.При этом я хочу, чтобы только часть вида за пределами белого поля (или справа от белого поля) была растянута / повторена при увеличении высоты UIView.

sketch1

Во всех моих попытках мне удавалось только создать прямую, которая влияет на всю ширину вида и приводит к виду, подобному рисунку с.

sketch2

IsВозможно ли для меня добиться эффекта, который я хочу (рисунок б.) с помощью contentStretch?Есть ли какая-то другая техника, которую я должен использовать, если не перерисовывать весь вид, или перерисовывает единственный (или лучший) способ добиться этого?

Спасибо,

Ответы [ 4 ]

1 голос
/ 22 февраля 2012

Чтобы это произошло с contentStretch, вам нужно установить прямоугольник contentStretch так, чтобы его top edge был ниже нижнего края белого поля, и так что его левый край находится к правому правого края белого поля. Вы, вероятно, обнаружите, что ваш фоновый узор слишком растянут и выглядит некрасиво.

Вместо этого, предоставьте вашему представлению подпредставление, которое рисует только белое поле. Установите пружины и распорки подпредставления так, чтобы поле оставалось в верхнем левом углу и не растягивалось.

0 голосов
/ 02 августа 2017

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

0 голосов
/ 14 марта 2012

То, что вы пытаетесь достичь, может быть сделано с помощью метода resizableImageWithCapInsets UIImage. Таким образом, вы можете установить ширину колпачка на каждой стороне изображения и указать, какая часть изображения должна повторяться (не растягиваться).

UIEdgeInset - это структура, состоящая из следующих четырех компонентов (CGFloat topCapWith, CGFloat leftCapWith, CGFloat bottomCapWith, CGFloat rightCapWith)

Код ниже поможет вам

UIImage * backgroundImage = [[UIImage imageNamed:@"Stretch.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(80, 4, 4, 10)];
    backgroundImageView.image = backgroundImage;
0 голосов
/ 22 февраля 2012

Я бы сделал белую рамку растягиваемой сверху, а фоновое представление заполняли шаблоном, используя colorWithPatternImage:

patternView.backgroundColor = [UIColor colorWithPatternImage:@"myBackgroundPattern.png"];

и черный ход можно сделать с помощью:

#include <QuartzCore/QuartzCore.h>
...
patternView.layer.borderWidth = 2.f;
patternView.layer.borderColor = [[UIColor blackColor] CGColor];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...