it-roy-ru.com

Нежелательный пробел слева от UIScrollView на iPhone X

UIScrollView отлично работает без пробелов слева на всех iPad и iPhone, кроме iPhone X. Как я могу удалить пробел?

Я использую раскадровки. Bounce On Scroll/Zoom отключены. На iPad или iPhone нет пробелов, кроме iPhone X. Я думаю, это может быть связано с безопасностью.

 enter image description here

8
zsong

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

var leftMargin: CGFloat = 0
var rightMargin: CGFloat = 0

if Device.isPhone() && Device.IS_5_8_INCHES() {
    self.leftMargin = 44
    self.rightMargin = 44
}

let frame = CGRect(
    x: (self.view.frame.width - self.leftMargin - self.rightMargin) * CGFloat(pageIndex),
    y: ...
)
1
zsong

Установка ограничения относительно safeArea является хорошей практикой для iPhone-X. Так Apple говорит -

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

В вашем случае вы задаете ограничения leading & trailing из scrollView с safeArea, а не superView

Следовательно, если вы рискуете наложить ограничение на superview вместо safeArea, содержимое вашего объекта может быть обрезано, особенно если вы поворачиваете влево, то контент с самого левого края будет обрезаться под верхний уровень iPhone-X.

 enter image description here

Apple Doc для SafeAreaLayoutGuide

4
Jack

Это расстояние от безопасной области, которое применяется слева/справа от UIScrollview как вставки содержимого в альбомной ориентации на iPhone X, что можно увидеть с помощью свойства только для чтения UIScrollview.safeAreaInsets.

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

UIScrollview.contentInsetAdjustmentBehavior = .never

Значение по умолчанию UIScrollViewContentInsetAdjustmentBehavior.automatic включает в себя поля направляющих макета безопасной области как вставки содержимого.

Примечание: автоматические ограничения макета не имеют ничего общего со вставками, это просто корректировка поведения вставок содержимого iOS 11 в UIScrollview.

3
AamirR