Одинаковые ограничения на одинаковые изображения, разное поведение? - PullRequest
0 голосов
/ 28 сентября 2018

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

Вот код ограничения.

PS: все они имеют следующие 2 строки.(Я просто удалил эти строки из каждой группы, чтобы избежать стены кода).

.contentMode = .scaleAspectFit

.translatesAutoresizingMaskIntoConstraints = false

ImageLineEvents.topAnchor.constraint(equalTo: LabelTitleEvents.bottomAnchor, constant:UI_SPACING_SCROLL).isActive = true
ImageLineEvents.centerXAnchor.constraint(equalTo: ScrollView.centerXAnchor).isActive = true
ImageLineEvents.widthAnchor.constraint(equalTo: VC_UserProfile.view.widthAnchor).isActive = true
ImageLineEvents.widthAnchor.constraint(equalTo: ImageLineEvents.heightAnchor, multiplier: (ImageLineEvents.image?.size.width)! / (ImageLineEvents.image?.size.height)!).isActive = true

ImageLineUpdates.topAnchor.constraint(equalTo: LabelTitleUpdates.bottomAnchor, constant:UI_SPACING_SCROLL).isActive = true
ImageLineUpdates.centerXAnchor.constraint(equalTo: ScrollView.centerXAnchor).isActive = true
ImageLineUpdates.widthAnchor.constraint(equalTo: VC_UserProfile.view.widthAnchor).isActive = true
ImageLineUpdates.widthAnchor.constraint(equalTo: ImageLineUpdates.heightAnchor, multiplier: (ImageLineUpdates.image?.size.width)! / (ImageLineUpdates.image?.size.height)!).isActive = true

ImageLineSoon.topAnchor.constraint(equalTo: LabelTitleSoon.bottomAnchor, constant:UI_SPACING_SCROLL).isActive = true
ImageLineSoon.centerXAnchor.constraint(equalTo: ScrollView.centerXAnchor).isActive = true
ImageLineSoon.widthAnchor.constraint(equalTo: VC_UserProfile.view.widthAnchor).isActive = true
ImageLineSoon.widthAnchor.constraint(equalTo: ImageLineSoon.heightAnchor, multiplier: (ImageLineSoon.image?.size.width)! / (ImageLineSoon.image?.size.height)!).isActive = true

ImageLineToday.topAnchor.constraint(equalTo: LabelTitleToday.bottomAnchor, constant:UI_SPACING_SCROLL).isActive = true
ImageLineToday.centerXAnchor.constraint(equalTo: ScrollView.centerXAnchor).isActive = true
ImageLineToday.widthAnchor.constraint(equalTo: VC_UserProfile.view.widthAnchor).isActive = true
ImageLineToday.widthAnchor.constraint(equalTo: ImageLineToday.heightAnchor, multiplier: (ImageLineToday.image?.size.width)! / (ImageLineToday.image?.size.height)!).isActive = true

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

print("ar = \(Float((ImageLineEvents.image?.size.width)!) / Float((ImageLineEvents.image?.size.height)!))")
print("ar = \(Float((ImageLineUpdates.image?.size.width)!) / Float((ImageLineUpdates.image?.size.height)!))")
print("ar = \(Float((ImageLineSoon.image?.size.width)!) / Float((ImageLineSoon.image?.size.height)!))")
print("ar = \(Float((ImageLineToday.image?.size.width)!) / Float((ImageLineToday.image?.size.height)!))")

print("w = \(ImageLineEvents.frame.width)")
print("w = \(ImageLineUpdates.frame.width)")
print("w = \(ImageLineSoon.frame.width)")
print("w = \(ImageLineToday.frame.width)")

print("h = \(ImageLineEvents.frame.height)")
print("h = \(ImageLineUpdates.frame.height)")
print("h = \(ImageLineSoon.frame.height)")
print("h = \(ImageLineToday.frame.height)")

Они из портрета, и все как и ожидалось.

ar = 162,5

ar = 162,5

ar = 162,5

ar = 162,5

ш = 335,0

ш = 335,0

ш = 335,0

ш = 335,0

h = 2,0

h = 2,0

h = 2,0

h = 2,0

Тем не менее, если я перехожу в ландшафт, последние 2 имеютразные результаты.

ar = 162,5

ar = 162,5

ar = 162,5

ar = 162,5

w = 684,0

ш = 684,0

ш = 684,0

ш = 684,0

ч = 4,33333333333333

ч = 4,33333333333333

h = 4,0 (почему это не 4,33 ???)

h = 4,0 (почему это не 4,33 ???)

Iпосмотрел миллионы раз, но я до сих пор не могу понять, что с этим не так.Там нет ошибок ограничения.Визуально последние 2 изображения не проходят по краям, потому что они сохраняют пропорции, но высота как-то ниже.Они все внутри ScrollView, но я не понимаю, как это может иметь значение.Любая помощь?

РЕДАКТИРОВАТЬ: Я добавил визуальный результат.Первые 2 ограничения - это первое изображение, последние 2 - последнее изображение.Как вы можете видеть, их ширина не одинакова в ландшафте.Изображение, о котором идет речь, это линия, расположенная чуть ниже заголовка, и она должна распространяться от заголовка, приводя к точечному следу изображения.Все они ведут себя хорошо на портрете, но на ландшафте, последние 2 ведут себя по-разному.

Правильное поведение Correct Behaviour

НеверноПоведение Wrong Behaviour

...