2013-12-11 2 views
0

Я пытаюсь добавить изображение в мое представление. Я попытался следующий код:Создать UIImageView программно

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tag40pixelsborder.png"]]; 
    imgView.frame = CGRectMake(200, 200, 30, 30); 
// imgView.bounds = CGRectMake(300, 300, 32, 32); 
    [imgView setContentMode:UIViewContentModeScaleAspectFit]; 
    [self.view addSubview:imgView]; 


    NSLog(@"frame x %f", imgView.frame.origin.x); 
    NSLog(@"frame y %f", imgView.frame.origin.y); 

Но картинка не отображается на экране, и NSLog вернуться 30,00 для «х» и 0,00 для «у» Если я раскомментировать строку границы и я удалить линию рамки, Я получаю 80.00 за «х» и 80.00 за «у».

Я использую autolayout, но тот же самый код работает на другом представлении! Что не так?

+0

Каковы размеры вашего изображения? – slecorne

+0

Этот код работает для меня, Ve вы добавили изображение в xcode, проверьте написание изображения – Yohan

+0

Я скопировал - вставьте имя изображения, я уверен, что он хороший. – anthoprotic

ответ

1

Если вы хотите использовать автомасштабирование, чтобы сделать это, вы должны сделать что-то в этом направлении.

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tag40pixelsborder.png"]]; 
imgView.translatesAutoresizingMaskIntoConstraints = NO; 
[imgView setContentMode:UIViewContentModeScaleAspectFit]; 
[imgView sizeToFit]; 
[self.view addSubview:imgView]; 

Тогда вы хотите установить ограничение Автокомпоновки то, что я вижу, у вас есть х = 200 г = 200

NSArray *constraints = [NSLayoutConstraint 
         constraintsWithVisualFormat:@"V:|-(200)-[imgView]" 
         options:0 
         metrics:nil 
         views:@{ @"imgView" : imgView }]; 
[self.view addConstraints:constraints]; 

constraints = [NSLayoutConstraint 
       constraintsWithVisualFormat:@"|-(200)-[imgView]" 
       options:0 
       metrics:nil 
       views:@{ @"imgView" : imgView }]; 
[self.view addConstraints:constraints]; 

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

Если вы хотите добавить высоты, вы можете удалить [imgView sizeToFit] и просто добавить высоты к ограничениям ширины и высоты, т. Е. | - (200) - [imgView (width)], а также для высоты в одном обозначенный буквой V :.

+0

Я пробовал ваше решение, но я получаю «Неизвестный метод класса для селекторных ограничений» с VisualFormat: options: metrics: views »из Xcode. Я забыл что-то импортировать? – anthoprotic

+0

Однако изображение теперь отображается (с вашими 5 строками кода), но оно находится в исходном разрешении (160x160) и всякий раз, когда я хочу изменить рамки/рамки, он исчезает. – anthoprotic

+0

Вы используете автоматический макет правильно и iOS> = 6? – darren102

1

Если вы используете autolayout, как вы уже сказали, вам следует избегать добавления subviews из кода! Если вы хотите сделать это, вы также должны программно добавить constrains. Ваш код в порядке, но автозапуск возится с ним. Если вы хотите грязное решение, вы должны добавить этот ImageView после того, как все будет загружено (например, в метод viewDidAppear:).

+0

Спасибо за ваше решение, но оно не работает даже в ViewDidAppear. Какие ограничения мне нужны, чтобы заставить его работать? Я не думаю, что это нормально, что я получаю такой вид NSLog – anthoprotic

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