Water movement

I have a problem with movement in water.

The character can only swim forward, using the camera forward vector if the value is positive, to be able to swim up forward and down.
Jump out of water step height is set to 40 cm. Pitch: 11,25° and works just fine!

The problem is when the character is in the middle of the water volume near the surface and the camera forward vector is angled up relative to the horizontal plane. The character rises up all the way to the waist and tries to skip up from the water (changing movement mode and animation, look jittery). I want to limit the character to reach higher than the head over the surface when not near a ledge.

Any suggestions how to solve this? When at the water surface and camera angle over horizontal i just want to move forward. Is there any built in solution for this? Or should i do a line trace to find distance to water surface?
Perhaps don’t even need to trace, could get a reference to the water volume and use the bounding volume to get the surface Z?

void ABaseCharacter::MoveForward(float Value)
{
	if (GetCharacterMovement()->MovementMode == EMovementMode::MOVE_Swimming)
	{
		if (Value > 0)
		{
			AddMovementInput(FirstPersonCamera->GetForwardVector(), Value);
		}
	}
}