В основном, в альбомной ориентации ширина экрана намного больше.Это происходит потому, что в альбомной ориентации ширина (которую вы используете в портретной ориентации) становится высотой.
Это действительно хороший и полезный ресурс Apple для понимания того, что они называют Авторазметка: Руководство по автоматической компоновке
Ваша проблема связана с классами размеров , и они являются усовершенствованной автоматической компоновкойСистема, вы можете узнать больше здесь
Есть несколько способов достижения вашей цели:
1. Если вы можете установить ограничения из раскадровки, это намного прощечтобы установить различные ограничения на основе портрета / пейзажа с помощью Size Class, вы найдете много уроков и ресурсов, но я свяжу вас с этим .Это по-итальянски, но я заверяю вас, что это полный размер классов, и с Google Translate это будет легко понять.
2. Вы можете использовать этот код дляпроверьте, в каком режиме вы находитесь:
if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft {
} else if UIDevice.current.orientation == UIDeviceOrientation.landscapeRight {
} else if UIDevice.current.orientation == UIDeviceOrientation.portrait {
} else if UIDevice.current.orientation == UIDeviceOrientation.portraitUpsideDown {
}
3. вы можете "вручную" проверить ширину:
Es.
// I used a random value, but it should be around the width value in portrait
if(width > 389){
width = 389
}
4. Использование Классов размера программным способом также является решением, но я бы никогда не использовал его.Тем не менее, это хороший учебник о том, как использовать их программно: Использование коллекций признаков для классов Auto Layout и Size