Я создаю приложение для калькулятора iOS, в котором есть метка истории, которая показывает все предыдущие вычисления, которые отображаются на одной строке (например, 30 * 10 = 300 4 * 300 = 1200). Я помещал ярлык в UIScrollView, так что, когда ярлык становится шире экрана, я могу горизонтально прокручивать историю. Я позиционировал ярлык, чтобы соответствовать горизонтально и вертикально внутри scrollview, и ограничил ярлык на scrollview в моей раскадровке.Почему я не получаю фактическое содержимое в UIScrollView?
На мой взгляд, контроллер после добавления вычисления в историю, я проверяю свойство canVerticallyScroll, которое указывает, что я добавил в UIScrollView через расширение. Это возвращает true, если ширина содержимого ScrollView шире экрана. Если это так, я хочу, чтобы он прокручивался до конца, используя setContentsOffset.
Вот код, на мой взгляд контроллера:
func saveResultTohistory(var operands: Array<Double>) {
if operands.count == 2 { // Unary operation
historyLabel.text = historyLabel.text! + operation + "\(operands.removeFirst()) = \(displayValue) "
} else if operands.count == 3 { // Binary operation
historyLabel.text = historyLabel.text! + "\(operands.removeFirst()) " + operation + " \(operands.removeFirst()) = \(displayValue) "
}
updateScrollView() // Update the position in the historyScroller
}
func updateScrollView() {
if historyScroller.canVerticallyScroll {
let end = CGPointMake(historyScroller.frame.size.width, 0)
historyScroller.setContentOffset(end, animated: true)
}
}
А вот продолжение:
extension UIScrollView {
var canVerticallyScroll: Bool {
get {
let widthOfScrollView = self.frame.size.width
let widthOfContent = self.contentSize.width
return widthOfContent > widthOfScrollView
}
}
}
Это работает, но это не точно, потому что, когда первый расчет добавляется к метке, contentSize ScrollView равен (0.0), чего не может быть, потому что в нем есть текст, и пусть его можно назвать (50, 0). после того, как я добавлю еще одно вычисление на метку обновления contentSize (50, 0), но знаю, что метка шире, чем это, потому что теперь она содержит два вычисления.
Так что в основном все работает, за исключением того, что когда я пытаюсь прочитать contentSize, я не получаю точного значения. Почему я не получаю фактический контент в UIScrollView?
спасибо. После того, как вы застряли, ваше объяснение помогло мне решить эту проблему. Для людей, которые сталкиваются с тем же, что и я, так я и решил: я подклассифицировал ** UIScrollView ** и внутри - ** layoutSubviews ** Я поставил логику, чтобы проверить, изменилась ли ширина содержимого и если содержимое больше затем экран. Если оба истины, я прокручиваю до конца scrollView, вызывая ** scrollRectToVisible() **. –