code currently looks like this but I'm not sure where the proper place to put it is so that I don't get layout cycles or something. It emulate's an Auto, *, Auto row grid.
var parentHeight = ParentView.Height;
var headerHeight = Math.Ceiling(_headerLayout.GetSizeRequest(double.PositiveInfinity, double.PositiveInfinity).Request.Height);
AbsoluteLayout.SetLayoutFlags(_headerLayout, AbsoluteLayoutFlags.WidthProportional);
AbsoluteLayout.SetLayoutBounds(_headerLayout, new Rectangle(0, 0, 1, headerHeight));
var footerHeight = Math.Ceiling(_messageSenderView.GetSizeRequest(double.PositiveInfinity, double.PositiveInfinity).Request.Height);
AbsoluteLayout.SetLayoutFlags(_messageSenderView, AbsoluteLayoutFlags.WidthProportional);
AbsoluteLayout.SetLayoutBounds(_messageSenderView, new Rectangle(0, parentHeight - footerHeight, 1, footerHeight));
AbsoluteLayout.SetLayoutFlags(_headerLayout, AbsoluteLayoutFlags.WidthProportional);
AbsoluteLayout.SetLayoutBounds(_headerLayout, new Rectangle(0, headerHeight, 1, parentHeight - headerHeight - footerHeight));