2016-07-14 2 views
0

Искал много на переполнение стека, но не нашел решения, которое работает для нас.UiScrollView Неверная высота (без автосохранения)

У нас есть несколько видов и UILabels и UIButtons в UIScrollView как показано ниже. При нажатии кнопки мы скрываем пару просмотров и ярлыков и пытаемся пересчитать высоту UIScollView.

UIScrollView 

-> UIView

-> UIView2

-> UIView3

-> UILabel1

-> UILabel2 (Обратите внимание, что эти этикетки находятся не внутри UIView, они непосредственно добавляются к scrollview. Является ли, или они должны быть добавлены это правильный подход внутри UIView)

-> UITextField (непосредственно добавлен к Scrollview)

-> UITextField1 (непосредственно добавлен в Scrollview)

-> UIButton (при нажатии кнопки выше textfields и ярлыки скрыты или показаны на основе бизнес-логики)

Когда мы пытаемся выполнить сброс s ize от UIScrollview по телефону UIButton клик по нему не вычисляет высоту правильно. Пробовал под решением, разделяемым множеством ответов в переполнении стека

  1. Проблема с метками и кнопками, добавленными непосредственно на UIScrollView?
  2. Есть ли лучший способ установить высоту UIScrollview правильно?
  3. Мы не хотим, чтобы использовать AutoConstraint

    CGRect contentRect = CGRectZero;for (UIView *view in uiScrollViewObj.subviews) { 
        contentRect = CGRectUnion(contentRect, view.frame); 
    } 
    uiScrollViewObj.contentSize = contentRect.size; 
    
+0

Вы пытаетесь изменить высоту внутреннего содержимого или высоту самого прокрутки? – DeyaEldeen

+0

Изменить высоту uiScrollView –

+0

uiScrollViewObj.contentSize изменяет размер внутренней области, где вы можете прокручивать, и не меняет высоту прокрутки, вам нужно изменить рамку scrollview. – DeyaEldeen

ответ

0
  1. Нет это не так, на самом деле UILabels и UIButtons являются UIViews.
  2. Я думаю, вы вводите в заблуждение два понятия. Высота UIScrollView - это высота окна просмотра (видимая часть прокрутки). То, что вы хотите изменить, - это высота contentSize, которая является высотой всего содержимого, которое вы хотите прокрутить (я не знаю, объяснил ли я сам себя).

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

Кроме того, ваш код выполняет итерацию через все виды прокрутки, и это не только те, которые вы добавили, но и те, которые были добавлены Apple.

+0

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

+0

Таким образом, проблема была устранена путем ручного перебора всех элементов дочернего элемента и установки contentSize. Спасибо за ваш ответ –

0

Лучший способ рассчитать содержание в динамическом режиме - это суммировать позиции прокрутки и их высоту. Что-то вроде этого должно работать:

CGFloat viewY, maxY=0; 
for (UIView *view in uiScrollViewObj.subviews) { 
    if (view.hidden) continue; 
    viewY = view.frame.origin.y + view.frame.size.height; 
    maxY = (viewY > maxY) ? viewY : maxY; 
} 
[uiScrollViewObj setContentSize:CGSizeMake(uiScrollViewObj.frame.size.width, maxY)]; 
+0

Спасибо за ваш ответ. Пробовал код выше, он не уменьшает высоту, если мы скроем представление. Существует дополнительный прокрутка ниже –

+0

Отредактировано над кодом, чтобы не включать вид, если он скрыт. Дополнительный свиток не должен появляться сейчас. – plgrenier

+0

Я уже пробовал это. не работал :( –

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