[Tex/LaTex] Vertical spacing \vfill inside tcolorbox

tcolorboxvertical alignment

Why \vfill does not work inside tcolorbox? Here is my MuWE (Minimal unWorking Example)

\documentclass[]{scrartcl}
\usepackage[many]{tcolorbox}
    \newtcolorbox{bilety}
    {   enhanced,
        space to upper,
        height=5cm,
        %borderline={0.3mm}{0mm}{black!75, dashed},
        segmentation style={black, solid, opacity=0, line width=0pt},
        colback =  black!5!white,
        colframe = black!15!white,
        sharpish corners,
    }

\begin{document}

        \begin{bilety}
             some text
             \vfill
             some other text
        \end{bilety}

\end{document}

————————-PDF output is———————-

enter image description here

But \vskip does!

    \begin{bilety}
         some text
         \vskip 3cm
         some other text
    \end{bilety}

————————-PDF output is———————-

enter image description here

Best Answer

In this case, it's a not a bug but a feature. The inner text box is decoupled from the fixed height setting for a number of reasons, e.g. lower box part support and breakability. Therefore, you cannot use \vfill, because the inner text box has no fixed height.

But, you can use a minipage with a fixed height inside the tcolorbox. You can put this minipage into the box setting options:

\documentclass[]{scrartcl}
\usepackage[many]{tcolorbox}

\newtcolorbox{bilety}
{   enhanced,
    space to upper,
    %height=5cm,
    segmentation style={black, solid, opacity=0, line width=0pt},
    colback =  black!5!white,
    colframe = black!15!white,
    sharpish corners,
    before upper={\begin{minipage}[t][4cm]{\linewidth}},
    after upper={\end{minipage}},
}

\begin{document}

  \begin{bilety}
    some text
    \par\vfill
    some other text
  \end{bilety}

\end{document}

Update (16-Nov-2018):

Alternatively, the option text fill can be used to automatically insert a minipage with adapted fixed height:

\documentclass[]{scrartcl}
\usepackage[many]{tcolorbox}

\newtcolorbox{bilety}
{   enhanced,
    %space to upper,
    height=5cm,
    %segmentation style={black, solid, opacity=0, line width=0pt},
    colback =  black!5!white,
    colframe = black!15!white,
    sharpish corners,
    text fill,
}

\begin{document}

  \begin{bilety}
    some text
    \par\vfill
    some other text
  \end{bilety}

\end{document}

enter image description here