2016-04-17 3 views
0

Я загружаю представление из раскадровки программно, но есть проблема с моими облаками subview (я использую Autoresize Subviews и т. Д.).iOS UIView Не изменяет размер Subviews?

При загрузке представления основной UIView выглядит как правильный размер, но подвидные объекты, зависящие от ограничений для динамического вычисления их конечной высоты, по-видимому, не изменяются в зависимости от размеров, на которые они были установлены в построителе интерфейса ,

Загрузка вид, как так: высота

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
ApplicationRecordingViewController* recordingController = (ApplicationRecordingViewController*)[storyboard instantiateViewControllerWithIdentifier:@"recordView2"]; 
[self presentViewController:recordingController animated:NO completion:nil]; 

Interface Builder

Orange района от верхней части главного окна в верхней части серой области. Серая область фиксированная высота

Странная вещь, если я задаю имитируемый размер в построителе интерфейса как правильный вид для моего телефона, размеры будут работать. Я предполагаю, что начальные высоты для подпунктов «запекаются» в представлении, но тогда (обычно) изменяются, когда вид действительно загружается?

Примечание: Оранжевая область должна быть полностью заполнена видом камеры. Я загружаю в нее.

incorrect height

Неправильная высота

correct height

Правильная высота, если я изменю моделируемой расположение

Очень хотелось бы знать, что я делаю неправильно!

Edit 1: Ограничения

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

Constraints

Constraints 2

Link to Storyboard with Scene

+0

Каких ограничений есть вы установили для различных взглядов? – Paulw11

+0

Я добавил ограничение как редактировать! – Paul

+0

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

ответ

0

Я знаю, что вы все лучше, чем у меня, но я испытал то же самое в моем последнем проекте. My Camera View внутри UIView не находится на полном экране или не изменяет размер и не подгоняет весь UIView, и я также разместил его на my daily blog.

Реализация viewDidLayoutSubviews - Внутри этого метода снова верните слой предварительного просмотра видео. внутри этого метода просто переформатируйте свои представления. После этого ваш предварительный просмотр видео будет заполнять высоту и ширину его родителя или то, что вы планировали.

Проблема также имеет отношение к иерархии ограничений и представлений.

enter image description here

+0

Я думаю, что это определенно был вид камеры. Оказывается, мое решение состояло в том, чтобы убедиться, что все правильно выложено, прежде чем инициализировать сам просмотр камеры (например, в viewDidAppear). – Paul

0

Вы уже получили ответ.

«Если я задал имитируемый размер в построителе интерфейса в качестве правильного вида для своего телефона, размеры будут работать».

Вы можете вызвать некоторые функции, чтобы получить высоту в viewDidLoad или viewWillAppear.

Изм.кода как это

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self.view setNeedsLayout]; 
    [self.view layoutIfNeeded]; 

    CGFloat height = [self getHeight]; 
} 

или

- (void) viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    CGFloat height = [self getHeight]; 
} 
0

Как я могу видеть в раскадровке Constrain вы установили нижнее пространство для нижней части макета направляющих 150. Я думаю, что это проблема. если вы даете фиксированную высоту в нижний вид, тогда не нужно устанавливать постоянную, как из нижней схемы макета -> 150.

Ваше старое Ограничить: ->

enter image description here

Просто установите нижнее пространство orangeview от Greenview = 0.

Проверить новую сдерживает,

enter image description here

Вот ваш ссылка на раскадровку,

Storyboard Download link

Вот ваш выход,

enter image description here

-1

Может быть, вы можете попытаться избавиться от этих два крючка.

enter image description here

0

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

Решение было переместить библиотеку камеры (метод инициализации SCRecorder) «s в viewDidAppear (был в viewDidLoad раньше).

Мое мышление IOS не autolayout вид камеры предварительного просмотра таким же образом, как и обычные UIViews, и т.д.

@interface ApplicationRecordingViewController() { 
    SCRecorder *_recorder; 
} 
@end 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    _recorder.previewView = _previewView; 
} 
Смежные вопросы