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 когда вы создаете представление своей карты.

Другие вопросы по тегам