Выявление и устранение проблемы с автоматической разметкой из вывода журнала - PullRequest
0 голосов
/ 17 апреля 2019

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

В определенных ячейках я хочу сетку текстовых полей с одинаковыми строками высоты, но различной ширины - в зависимости от длинытекстовое поле.

grid

Я использую вертикальный вид стека, содержащий горизонтальные виды стека, все с выравниванием: заполнить и распределить: заполнить пропорционально.

Если я не уменьшу минимальный размер шрифта, сетка не появится вообще на некоторых устройствах, но после долгих хлопот я могу заставить сетку появляться на симуляторе при размерах классов ...

НО, журнал показывает "Невозможно одновременно удовлетворить ограничения ..."

"<NSLayoutConstraint:0x600002bde620 UITextField:0x7f92608dc200.width == 45   (active)>",
"<NSLayoutConstraint:0x600002bfe210 'fittingSizeHTarget' UIStackView:0x7f925f463d70.width == 0   (active)>",
"<NSLayoutConstraint:0x600002bd2cb0 'UISV-canvas-connection' UIStackView:0x7f925f463d70.leading == UITextField:0x7f92608dc200.leading   (active)>",
"<NSLayoutConstraint:0x600002bd2d00 'UISV-canvas-connection' H:[UITextField:0x7f926081b200]-(0)-|   (active, names: '|':UIStackView:0x7f925f463d70 )>",
"<NSLayoutConstraint:0x600002bd4be0 'UISV-spacing' H:[UITextField:0x7f92608dc200]-(0)-[UITextField:0x7f926081b200]   (active)>"

, что, как я понимаю из https://www.wtfautolayout.com, означает:

Ширина TextField1 должна равняться45.

Ширина StackView должна быть равна 0.

Передний край StackView должен быть равен переднему краю TextField1. ‡

Задний край StackView должен быть равен TextField2 's Задний край. ‡

Передний край TextField2 должен равняться заднему краю TextField1. ‡

Последние три выглядят знакомо, но я не установил и не могу найти ограничения ширины (которые, я думаю, являются содержимымbased).

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

Моя проблема в том, чтобы точно определить, где это происходит, почему это происходит и как мне это эффективно исправить.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

После комментария я попытался использовать UICollectionView для создания таблицы, подобной сетке. Код ниже со ссылкой на источник. Это большая работа по сравнению с упорядочением статического содержимого и использованием автоматического макета, но если автоматический макет не может доставить этот макет, я должен принять это как ответ.

Даже при использовании этого подхода у меня есть проблема с последней строкой в ​​сетке - Последняя строка в сетке представления коллекции выглядит по-разному, несмотря на одинаковую ширину - быстро iOS . Тем не менее, если мне удастся выровнять последний ряд, и никто не предположит, что сетка возможна с использованием ограничений, я обновлю и приму этот ответ, чтобы он был правильным.

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
    let settings = currentContents[indexPath.item]
    let height = CGFloat(30)

    // https://stackoverflow.com/questions/54915227/uicollectionview-remove-space-between-cells-with-7-items-per-row
    var cellWidth = CGFloat()
    let availableWidth = collectionView.bounds.size.width
    print("available width", availableWidth)
    let minimumWidth = floor(availableWidth / collectionContents.cellsPerRow5)
    // let remainder = availableWidth - minimumWidth * CGFloat(cellsPerRow4)
    print("minmum width", minimumWidth)
    cellWidth = minimumWidth * settings.portion - 1
    print("cell width", cellWidth)

    return CGSize(width: cellWidth, height: height)
}
0 голосов
/ 17 апреля 2019

Похоже, что ширина UITextField ограничена 45 в вашей раскадровке.

Добавьте Symbolic constraint для UIViewAlertForUnsatisfiableConstraints в XCode и попробуйте отладить проблему.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...