Вы не сможете ссылаться на него напрямую, если он помечен как внутренний. Однако существует хакерский способ получить любой вид и использовать его для AutoLayout (при условии, что вид использует autoLayout и имеет привязки, которые вы можете использовать).
Поскольку каждое представление имеет массив subViews
, который вы можете перебиратьподвиды, чтобы найти тот, который вы хотите. Все подпредставления видны, даже те, которые происходят из частных экземпляров. Хитрость заключается в определении того, что вам нужно.
Если определение типа доступно, вы можете сделать что-то вроде этого
let navView = viewController.subViews.first{$0 is NavigationView}!
let stackView = navView.subViews.first{$0 is UIStackView}!
floatingButton.topAnchor.constraint(equalTo: stackView.topAnchor).isActive true
Если у вас нет типа, который можно сопоставить с вамиПридется сделать что-то еще более хакерское, например сопоставить с описанием: .first{$0.description conatins "stack"}
. Или даже методом проб и ошибок, индексируя массив subView до тех пор, пока вы не получите желаемый результат, а затем надеетесь, что порядок представлений всегда одинаков!
Если вы хотите рискнуть этим в рабочем коде, это толькорешение, которое вы можете принять, поскольку оно может быть взломано, если библиотека изменит свой дизайн пользовательского интерфейса. В зависимости от пользовательской базы приложения, я могу рискнуть сопоставить данные с типом, но, вероятно, не с другими способами!
Примечание. Для краткости я развернул приведенные выше представления принудительно - вам нужно быть немного осторожнее впроизводственный код с этим тоже: -)