Ответ 1
У меня была та же ошибка, когда я пытался умножить view.frame.height на Double. Если вы выполняете какие-либо математические операции со свойствами screenBounds, убедитесь, что типы совпадают.
Я пытаюсь реализовать анимацию для прямоугольника для выполнения модального вертикального swipe.However, когда я пытаюсь скомпилировать код, я получаю следующую ошибку: "Тип выражения SWIFT 4" @value CGRect "неоднозначен без дополнительного контекста". Я выделил проблему для аргументов, которые передаются в значение CGRect init, но, согласно документации Apple iOS, этих параметров должно быть достаточно, чтобы указать представление "frame", которое мне нужно оживить.
Вот мой код:
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
guard
let fromView = transitionContext.viewController(forKey: .from),
let toView = transitionContext.viewController(forKey: .to)
else {
return
}
let containerView = transitionContext.containerView
containerView.insertSubview((toView.view)!, belowSubview: (fromView.view)!)
let toFrame = transitionContext.finalFrame(for: toView)
let screenBounds = UIScreen.main.bounds
let bottomLeftCorner = CGPoint(x: 0, y: screenBounds.height)
let finalFrameForVC = CGRect(origin: bottomLeftCorner, size: screenBounds.size)
UIView.animate(withDuration: 2, delay: 1,
options: [], (using: transitionContext.finalFrame(for: fromView)),
animations: {
fromView.view.frame = finalFrameForVC
},
completion: { _ in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
})
}
У меня была та же ошибка, когда я пытался умножить view.frame.height на Double. Если вы выполняете какие-либо математические операции со свойствами screenBounds, убедитесь, что типы совпадают.
Моя проблема заключалась в том, что я пытался выполнить операцию между переменной CGFloat и переменной Double.
Исправлено: преобразование переменной Double в CGFloat. Проверьте ваши типы переменных.
Я надеюсь, что это помогает! :)
Я пришел сюда в поисках ответа на вопрос, что вызывало ошибку "Тип выражения '@lvalue CGRect' неоднозначен без дополнительного контекста”, и хотя здесь ничего не ответило, я нашел решение проблемы, поэтому оставлю его здесь для всех, кто сталкивается с этим вопросом через Google. При создании CGRect обязательно приведите любые неоднозначные значения к CGFloats (например, var width = CGFloat (100)) вместо того, чтобы полагаться на то, что компилятор определит правильный тип/приведение для вас.
Это ошибка в XCode 10.1, о которой я собираюсь сообщить.
let myHeight = CGFloat(100)
myHeight -= myView.frame.height
Это приводит к ошибке:
"Тип выражения" @lvalue CGRect "неоднозначен без дополнительного контекста"
Ошибка неверна, проблема в том, что myHeight
является константой.
Это не ваш finalFrameForVC
который вызывает исключение "@value CGRect" неоднозначен без дополнительного контекста ", но он из fromView.view.frame
.
Исправьте его, объявив fromView.view
явно как UIView:
UIView.animate(withDuration: 2, delay: 1, options: [], animations: {
let view: UIView = fromView.view
view.frame = finalFrameForVC as! CGRect
}) { _ in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
Проблема заключается в вашем анимационном вызове, который
переформатирован:
UIView.animate(
withDuration: 2,
delay: 1,
options: [],
(using: transitionContext.finalFrame(for: fromView)),
animations: {
fromView.view.frame = finalFrameForVC
},
completion: { _ in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
)
Обратите внимание: (using: transitionContext.finalFrame(for: fromView)),
. Вы не можете обернуть часть метода в круглых скобках, включая одно из имен внешних параметров, это должно быть:
UIView.animate(
withDuration: 2,
delay: 1,
options: [],
using: transitionContext.finalFrame(for: fromView),
animations: {
fromView.view.frame = finalFrameForVC
},
completion: { _ in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
)
Именно это и вызывает ошибку. Тем не менее, нет также метода анимации с using:
part, поэтому я предполагаю, что это просто ошибка копирования-вставки, и вы действительно хотите просто:
UIView.animate(
withDuration: 2,
delay: 1,
options: [],
animations: {
fromView.view.frame = finalFrameForVC
},
completion: { _ in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
}
)
У меня была такая же проблема только сейчас. и я исправляю это так:
и как в примере выше, что: self.view должно быть присвоено другой переменной, и представление должно быть принудительно приведено: view !, и тогда компиляция будет работать успешно.
Я получил эту ошибку, когда попытался создать CGRect
и забыл добавить .constant
в конец имени переменной для NSLayoutConstraint
Как Рори Приор писал выше, я получил эту ошибку, пытаясь создать CGPoint
и мне нужно было указать, что параметры были CGFloat
но мне также нужно было пометить параметры x: и y: при CGPoint
в CGPoint
чтобы CGPoint
знал, что ожидается CGFloat
. Вот код:
let topRight = CGPoint(x:CGFloat(cellTitleLabel.frame.maxX),y:CGFloat(cellTitleLabel.frame.minY))
Для меня я поставил Int
в качестве высоты CGRect.
Xcode ошибочно указывал на y
с этой ошибкой
Тип выражения '@value CGRect' неоднозначен без дополнительного контекста
Просто неявно определите высоту как CGFloat
let height:CGFloat = 100
Действительно глупый ответ n00b, у меня была такая же проблема
"Тип выражения" @lvalue CGRect "неоднозначен без дополнительного контекста"
Это было причиной, потому что я нажал кнопку возврата до CGFloat
. Проверьте, чтобы убедиться, что это на одной линии. Надеюсь, это кому-нибудь поможет.