#ios #swift
#iOS #swift
Вопрос:
Я устанавливаю высоту для своих изображений программно. Но это работает должным образом только на iPhone SE. Но не, например, на iPhone X.
Вот скриншоты:
Теперь давайте взглянем на мой код. Как вы можете видеть, я программно устанавливаю положение x и y для изображений. Кроме того, высота и ширина.
let kint = skrolas.frame.height // Here's my scrollView frame
vienas.frame = CGRect(x: 8, y: 17, width: screenWidth-42, height: kint) // Here I set my first image programatically. I want height to be the same like my scrollView height.
let dydis2 = vienas.frame // Here's my first picture frame
du.frame = CGRect(x: (dydis2.origin.x (screenWidth-42) 8), y: 17, width: screenWidth-42, height: kint) // Here's my second picture
let dydis3: CGRect = du.frame
trys.frame = CGRect(x: (dydis3.origin.x (screenWidth-42) 8), y: 17, width: screenWidth-42, height: kint) // And thirt picture
Итак, как вы видите, моя ширина работает должным образом. Но мой рост не работает. И я не понимаю, почему. Как я упоминал в своем коде, я установил высоту своих изображений такой же, как в ScrollView.
Мой ScrollView выглядит следующим образом на iPhone XS:
Вот ссылка на мой проект: DropBox
@IBOutlet weak var skrolas: UIScrollView!
public var screenWidth: CGFloat {
return UIScreen.main.bounds.width
}
public var screenHeight: CGFloat {
return UIScreen.main.bounds.height
}
Комментарии:
1. Почему вы не используете
Autolayout
? И где вызывается ваш код, который устанавливает рамки?2. если вы хотите показать несколько изображений с функцией прокрутки, используйте для этого представление коллекции.
3. Вы устанавливаете рамки просмотра изображений в
viewDidLoad()
?4. @DonMag Да, я настраиваю viewDidLoad().
5. @DonMag Кроме того, я назначил ссылку на свой проект.
Ответ №1:
Проблема 1. Вы должны использовать ограничения автоматической компоновки вместо явной настройки рамок.
Проблема 2. Вы устанавливаете размеры фрейма, в viewDidLoad()
котором раньше выполнялся какой-либо макет, поэтому у вас нет доступа к фактической ширине и высоте экрана.
Проблема 3: У вас есть опция «Загрузить другую фотографию», поэтому я предполагаю, что в конечном итоге вы захотите показать много фотографий. Используя ваш подход, вы быстро столкнетесь с проблемами с памятью.
Вероятно, вам следует подумать об использовании UICollectionView
. Это дало бы вам «автоматическую» горизонтальную прокрутку и позволило бы использовать память намного эффективнее — вы могли бы прокручивать множество изображений без проблем.
Однако первый шаг, чтобы увидеть проблему с размером, — это переместить свой код определения размера из viewDidLoad()
в viewDidLayoutSubviews()
, и вы получите правильные значения размера.
Комментарии:
1. viewDidLayoutSubviews() имел место. В любом случае, я попытался использовать UICollectionView. Честно говоря, сначала я боялся, что это слишком сложно, но, похоже, это намного проще. Спасибо. Я отмечу этот ответ как правильный. Вы дали мне два решения. Спасибо.