ScrollView как подпредставление не учитывает границы кадра - PullRequest
1 голос
/ 06 июня 2011

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

Подпредставление расположено так, что оно занимает около нижней половины экрана, с небольшим - около 20 пикселей - полем внизу.

Изначально он отображается в правильном положении, но перезаписывает нижнее поле, даже если рамка прокрутки настроена так, чтобы оставить поле.

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

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

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

Initial load

Второе изображение показывает, что оно прокручено вверх:

Scrolled up toward the top

третье изображение показывает, что оно прокручено до самого верха - обратите внимание, что нижнее поле стало видимым.

enter image description here

Ответы [ 2 ]

3 голосов
/ 06 июня 2011

Я не уверен на 100% в этом, но заслуживаю внимания: я думаю, вы, вероятно, неправильно устанавливаете свойство Bounds на вашем столе.

Чтобы решить эту проблему, проще всего было бы установить myscrollview.clipsToBounds = true.

0 голосов
/ 06 июня 2011

Что-то здесь определенно не так.Я думаю, что происходит то, что вы добавляете тот же экземпляр scrollview, что и subview для самого себя.Так что в основном то, что у вас осталось, это один экземпляр.Все, что вы добавляете в «подпредставление», в основном добавляется в суперпредставление, поскольку это один и тот же объект.

Например, я думаю, что вы делаете это в контроллере представления:

//...
private UIScrollView myScrollView;
public override void ViewDidLoad()
{
    this.myScrollView = new UIScrollView();
    this.View = this.myScrollView;
    this.View.AddSubview(this.mySrcollView); // same instance
    this.myScrollView.AddSubview(aUIButton); // "aUIButton" will be added in View also, since it is the same object
}

Если это так, то это неправильно.Я предлагаю вообще не менять вид контроллера.Если вы хотите иметь контроллер с полноэкранным UIScrollView, просто создайте его и добавьте в качестве подпредставления, убедившись, что свойство AutoSizesSubviews имеет значение true.

Это, по крайней мере, мое понимание.

...