UIView

2013-07-17 3 views
4

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

У меня есть UIView, который содержит подвидов (прилагается рисунок) и создается до того, как он будет добавлен в качестве подчиненного к чему-либо.

enter image description here

В определенный момент времени, я добавляю его как вид подвид к UITableViewCell. Я называю

[tableViewCell.contentView addSubview:mySubview] 
    //.... 
[mySubview setBounds:tableViewCell.contentView.bounds] 

и когда я инициализировать свой подвид у меня есть:

[self setAutoresizesSubviews:YES] 

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

Я мог бы легко подойти к этому все неправильно в своих мыслях, и я приветствую любые предложения!

EDIT Большое спасибо за вашу помощь, Кхань Нгуен

Итак, как я уже сказал, когда я инициализации v1, (и, по определению v2) я не знаю размеры v1.

Когда я знаю границы, я хочу, чтобы поместить v1 в Я предполагаю, что я могу сделать что-то вроде этого:

[v1 setBounds:(some CGRECT)]; 
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; 

или CI просто установите autoresizingMask на v2, как только я его экземпляр (когда я все еще не знают размеров v1)?

+0

Некоторые вопросы: 1. Вы используете автозапуск? 2. Вы уверены, что не используете автозапуск? – Andrea

+0

Спасибо за ответ @Andrea. Все, что я могу вам сказать, это то, что я не использую раскадровку xib-файлов (все делается программно), и я нигде не указывал в своем коде, чтобы использовать (или не использовать) автозапуск. – Adam

+0

HAve вы установили маску авторезинга размещенного представления (mySubview)? – Andrea

ответ

1

Если у вас есть вид v1, его подтаблицы v2 и вы хотите v2 закрепилась левого края, а ширина его изменяется, когда v1 изменяется (т.е. расстояние между v1 «s правого края и v2» правого края s постоянна) , используйте:

v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; 

Для Swift:

v2.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleBottomMargin] 

По умолчанию autoresizesSubviews ДА. Вам не нужно его устанавливать.

EDIT

Каждый вид имеет размеры, даже если вы не знаете (вобще NSLog, если вы хотите знать это). Если представление только что было начато, его размеры вероятны (0, 0). autoresizesSubviews работает даже в этом случае, если вы знаете, сколько интервалов вам нужно между подвью и надзором.

Например, вы хотите v2 будет 10px из v1 для левого края и 20px по правому краю, следующий будет делать

// v1 has been initialized, and its dimensions are unknown (to you) 
// It's probably (0, 0), but that doesn't matter 
// 30px = 10px + 20px 
v2.frame = CGRectMake(10, 0, v1.bounds.size.width - 30, 100); 
v2.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; 

Обратите внимание на третью линию, v2.frame будет установлен в некоторые отрицательные числа, если v1 имеет нулевой размер первоначально, но последний, когда кадр v1 установлен в его правильный размер (либо вами, либо UITableViewCell), v2 соответственно изменит размер (из-за ограничения авторезистировки) и станет именно тем, чего вы хотите достичь.

+0

Это может помочь, еще не уверенный. То, что я делаю, является initWithFrame на subView v2 в некотором неизвестном контексте v1. Когда я наконец приду и сделаю setBounds на v1, должен ли v2 автоматически стать шире? Имейте в виду, что я сделал initWithFrame: CGRectMake (110,10, super.frame.size.width, super.frame.size.height) до того, как был определен кадр супер. – Adam

+0

Вам нужно знать точный размер 'v1' и' v2', как только вызывается эта строка. После этой строки изменения ширины 'v1' будут распространяться на' v2'. –

+0

Просмотреть мой править Khanh – Adam

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