указанное в xib местоположение перемещается при загрузке UIView? - PullRequest
0 голосов
/ 29 сентября 2010

У меня есть пара контроллеров представления, которые я хочу, чтобы все разделяли строку состояния заголовка.Этот вид заголовка показывает состояние определенных вещей в моем приложении.Я использовал IB для разметки содержимого представления заголовка в его собственной xib, затем также использовал IB для разметки контроллеров представления, добавляя элемент-заполнитель UIView в xibs контроллера представления, когда я загружаю в заголовок программно.

Теперь, когда я создаю подкласс UIView из содержимого xib представления и добавляю его в качестве subview к представлению любого из моих контроллеров представления, местоположение, которое я указал для представления заголовка в моем xib контроллера представления, кажетсяигнорируется, и представление заголовка помещается в (0,0), несмотря ни на что.Все содержимое представления заголовка загружается и отображается нормально, это просто расположение представления заголовка в контроллере представления, которое является неправильным.

Вот как я загружаю и добавляю свое представление заголовка в мой контроллер представления:

header = [InfoHeader loadFromNib:MY_NIB_NAME withOwner:self];
[self.view addSubview:header];

Подтверждено, что у xib контроллера представления есть выход, подключенный к переменной header.И вот этот метод loadFromNib:

+(InfoHeader *) loadFromNib: (NSString *) nibName withOwner:(id) objectOwner
{
    NSBundle *b = [NSBundle mainBundle];
    NSArray *nib = [b loadNibNamed:nibName owner:objectOwner options:nil];

    InfoHeader *header;

    for (id obj in nib)
    {
        if ([obj isKindOfClass:[InfoHeader class]])
        {
            header = (InfoHeader *) obj;
        }
    }

    return header;
}

Есть идеи, что здесь проверить?Я бы предпочел не размещать панель заголовков программно, но пусть IB сделает это.

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Изменили ли вы местоположение своего подпредставления в IB? Обычно местоположением по умолчанию (0, 0) представления будет координата (сверху, слева) большого представления на экране. Я думаю, что проверка будет работать нормально

0 голосов
/ 29 сентября 2010

Вы можете сделать это без использования представления «заполнитель», программно указав рамку подпредставления:

InfoHeader *header = [InfoHeader loadFromNib:MY_NIB_NAME withOwner:self];
header.frame = CGRectMake(0, 44, header.frame.size.width, header.frame.size.height);
[self.view addSubview:header];

(этот код предполагает, что вы удалили выход header из вашего класса, поэтому вместо него он может быть локальной переменной).

Или, если вы предпочитаете использовать заполнитель (чтобы вы могли указать позицию заголовка, используя IB вместо программного), сделайте это следующим образом:

InfoHeader *headerView = [InfoHeader loadFromNib:MY_NIB_NAME withOwner:self];
[header addSubview:headerView];
...