Swift autolayout: обновить размер представления
Я использую PureLayout
Кстати, я делаю все верстку кода.
у меня есть UIScrollView
это работает как лента новостей Facebook. Мой вид прокрутки имеет несколько подпредставлений. Давайте назовем их "карточками".
Я установил свои ограничения внутри updateConstraints
в качестве таких:
for (i, view) in enumerate(self.viewsForAutoLayout) {
/** Set view dimension **/
view.autoSetDimension(ALDimension.Width, toSize: view.frame.width)
view.autoSetDimension(ALDimension.Height, toSize: view.frame.height)
/** Make 'em stack **/
if i == 0 {
view.autoPinEdgeToSuperviewEdge(
ALEdge.Top,
withInset: offset
)
} else {
view.autoPinEdge(
ALEdge.Top,
toEdge: ALEdge.Bottom,
ofView: self.viewsForAutoLayout[i - 1],
withOffset: offset
)
}
}
self.setNeedsLayout()
И в layoutSubviews
вот где я изменяю размеры карт. Их соответствующая высота обновляется после загрузки изображения из Интернета (через NSURLConnection.sendAsynchronousRequest
К вашему сведению, но не имеет отношения к этой теме.) После этого я обновляю scrollView
высота
for (i, view) in enumerate(self.viewsForAutoLayout) {
view.realignContent()
}
totalHeight += view.frame.size.height + offset
let size = CGSizeMake(AppConstants.ScreenSize.SCREEN_WIDTH, totalHeight)
self.scrollView.resizeContent(size) // extension
Проблема в том, что они не выровнены должным образом. Это как звонить setNeedsLayout()
(который в конечном итоге вызывает layoutSubviews()
- поправьте меня, если я ошибаюсь) это не выравнивает содержание вообще. Я также убедился, что setNeedsUpdateConstraints()
называется также.
Я пытался назвать это в layoutSubviews
...
view.autoSetDimension(ALDimension.Height, toSize: view.frame.height)
... но я получаю какое-то предупреждение:
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this: (1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand,
refer to the documentation for the UIView property
translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x1700918a0 V:[XXX.ContentBox:0x15fd63a80(928.986)]>",
"<NSLayoutConstraint:0x170098bf0 V:[XXX.ContentBox:0x15fd63a80(1275.99)]>"
)
( ContentBox
мой UIView
для карты)
Карты выглядят испорченными. Что я должен сделать, чтобы правильно выровнять свои карты?
Я с удовольствием отвечу на дополнительные комментарии относительно кода, если это поможет понять вопрос. :) Предложения на стороне тоже неплохие.
1 ответ
Исходя из предупреждения, которое вы видите, похоже, вам нужно установить view.translatesAutoresizingMaskIntoConstraints = false
когда вы создаете представление своей карты.