标签: inline

SwiftUI 更改内联导航的导航栏背景颜色BarTitleDisplayMode

我刚刚开始在 SwiftUI 中编码并遇到了一个问题。我需要为导航栏(NavigationView)的背景赋予不同的颜色。当我从一个视图转到下一个视图时,颜色会发生变化。我需要让它为“内联”的 navigationBarTitleDisplayMode 工作。

我尝试了SwiftUI update navigation bar title color中提出的解决方案 ,但这些解决方案都不能完全满足我的需要。

  1. 对该帖子的回复中的解决方案适用于内联: 使用 UIViewControllerRepresentable。然而,当我们第一次打开视图时,它会显示前一个视图的颜色一秒钟,然后再更改为新颜色。我想避免这种情况,并在所有内容出现在屏幕上时立即显示颜色。有没有办法做到这一点?

  2. 这个其他解决方案也不起作用:在 init() 中更改 UINavigation 的外观,因为当我在 init() 中设置背景时,它将更改应用程序中所有视图的背景。同样,我需要视图具有不同的背景颜色。

  3. 我尝试了类似于此解决方案的方法:修改工具栏,但它不允许我更改导航栏的颜色。

  4. 我尝试的另一个解决方案是:Creating navigationBarColor function,它基于:NAVIGATIONVIEW DYNAMIC Behind COLOR IN SWIFTUI。该解决方案适用于navigationBarTitleDisplayMode“large”,但是当将navigationBarTitleDisplayMode设置为“inline”时,它将以不同的颜色显示导航栏的背景颜色,就好像它被灰色/透明层覆盖一样。例如,它在“大”模式下显示的颜色是: 大模式下的红色 但是相反,它显示的颜色是: 内联模式下的红色

  5. 最后,我尝试了这个解决方案:子类化 UIViewController 并配置 viewDidLayoutSubviews(),但它也无法满足我的需求。

最接近我需要的解决方案是 1. 和 4.,但它们仍然不能 100% 工作。

有人知道如何使这些解决方案中的任何一个都适用于内联的 navigationBarTitleDisplayMode,能够更改不同布局中导航栏的背景颜色,并在显示视图后显示新颜色(无延迟)?

谢谢你!

顺便说一下,我使用的是 XCode 12.5。


以下是我正在使用的示例代码,以示例 4. 作为模型:

FirstView.swift

import SwiftUI

struct FirstView: View {
    @State private var selection: String? = nil
    
    var …
Run Code Online (Sandbox Code Playgroud)

background inline navigationview swiftui

16
推荐指数
2
解决办法
2万
查看次数

何时"内联"无效?(在C中)

有些人喜欢使用inline关键字C,并在标题中添加大功能.你什么时候认为这是无效的?我认为它有时甚至很烦人,因为它很不寻常.

我的原则是inline应该用于非常频繁访问的小函数,或者用于实际类型检查.无论如何,我的品味指导我,但我不知道如何最好地解释为什么inline对大功能不那么有用的原因.

这个问题中,人们建议编译器可以更好地猜测正确的事情.这也是我的假设.当我尝试使用这个参数时,人们回复它不适用于来自不同对象的函数.好吧,我不知道(例如,使用GCC).

谢谢你的回答!

c inline

15
推荐指数
4
解决办法
1594
查看次数

内联的目的是什么?

我与Johannes Schaub就关键字进行了讨论.那里的代码是这样的:inline

namespace ... {
    static void someFunction() {
        MYCLASS::GetInstance()->someFunction();
    }
};
Run Code Online (Sandbox Code Playgroud)

他说:

将其作为内联函数可以在可执行文件中保存代码大小

但根据我在这里这里的发现,不需要,因为:

  • [内联]仅在编译器的成本/收益分析显示为有利可图时才会出现
  • 主流C++编译器(如Microsoft Visual C++和GCC)支持一个选项,允许编译器自动内联任何合适的函数,甚至那些未标记为内联函数的函数.

然而,约翰内斯表示明确指定它还有其他好处.不幸的是我不理解他们.例如,他说,"内联"允许您在程序中多次定义函数.,我很难理解(并找到参考).

所以

  1. 是否inline只是编译器的建议?
  2. 当你有一个小功能时我是否应该明确说明(我猜1-4指令?)
  3. 写作有什么其他好处inline
  4. 是否需要声明inline以减少可执行文件的大小,即使编译器(根据维基百科[我知道,错误的引用])应该自己找到这样的函数?

还有什么我想念的吗?

c++ compiler-construction inline

15
推荐指数
2
解决办法
1663
查看次数

css list inline不是水平列出项目?

我不知道为什么这个显示不正确,列表是水平显示的?而是垂直显示!

这是我的代码:

#stats li {
  display: inline;
  list-style-type: none;
  padding-right: 20px;
}
Run Code Online (Sandbox Code Playgroud)
<ul id="stats">
  <li>
    <h1>53</h1>
    </a>
  </li>
  <li>
    <h1>67</h1>
    </a>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

html css inline html-lists

15
推荐指数
2
解决办法
7万
查看次数

我可以在UIWebView内联播放youtube视频(不是全屏)吗?

我到处都看过如何做到这一点,还没有找到答案.是否可以在iPhone内联的UIWebView中播放YouTube视频,即不是全屏?我知道iPhone不支持flash,但youtube支持html5并且有h.264视频不是吗?我不应该这样做吗?

我已将allowsInlineMediaPlayback设置为YES,但仍然可以全屏播放.

youtube inline uiwebview

15
推荐指数
1
解决办法
2万
查看次数

C++链接器会自动内联函数(没有"inline"关键字,而不在头文件中实现)?

C++链接器是否会自动内联"传递"函数,这些函数未在头文件中定义,并且未明确要求通过inline关键字"内联" ?

例如,以下情况经常发生,并且应始终受益于"内联",似乎每个编译器供应商都应该通过链接器"内联""自动"处理它(在可能的情况下):

//FILE: MyA.hpp
class MyA
{
  public:
    int foo(void) const;
};

//FILE: MyB.hpp
class MyB
{
  private:
    MyA my_a_;
  public:
    int foo(void) const;
};

//FILE: MyB.cpp
// PLEASE SAY THIS FUNCTION IS "INLINED" BY THE LINKER, EVEN THOUGH
// IT WAS NOT IMPLICITLY/EXPLICITLY REQUESTED TO BE "INLINED"?
int MyB::foo(void)
{
  return my_a_.foo();
}
Run Code Online (Sandbox Code Playgroud)

我知道MSVS链接器将通过其链接时间代码生成(LTGCC)执行一些"内联" ,并且GCC工具链还支持链接时间优化(LTO)(请参阅: 链接器内联函数能否?).

此外,我知道有些情况下不能 "内联",例如当实现对链接器"不可用"时(例如,跨共享库边界,发生单独链接).

但是,如果这是代码链接到一个单一的,不跨越DLL /共享-lib的边界可执行文件,我希望编译器/连接器供应商,以自动内联函数,作为一个简单的和显而易见的优化(使双方获益的性能-和大小)? …

c++ optimization linker inline compiler-optimization

15
推荐指数
4
解决办法
5648
查看次数

在C#中内联方法的成本

我最近在C#中实现了QuickSort算法.对包含数百万个项目的整数数组进行排序,代码的性能比.NET的实现大约低10%.

private static void QS(int[] arr, int left, int right)
{
    if (left >= right) return;

    var pIndex = Partition(arr, left, right);
    QS( arr, left, pIndex);
    QS( arr, pIndex + 1, right);
}
Run Code Online (Sandbox Code Playgroud)

在包含500万个项目的数组中,此代码比.NET慢大约60ms.

随后,我创建了另一个方法,该Partition()方法具有内联方法QS()(消除方法调用和return语句).然而,这导致性能下降到比.NET的排序方法慢约250ms.

为什么会这样?

编辑:这是该Partition()方法的代码.在内联版本中QS(),除了return语句之外,此方法的全部内容都替换了该var pIndex = Partition(arr, left, right);行.

private static int Partition(int[] arr, int left, int right)
{
    int pivot = arr[left];
    int leftPoint = left - 1;
    int pIndex = …
Run Code Online (Sandbox Code Playgroud)

c# performance inline quicksort

15
推荐指数
1
解决办法
631
查看次数

_LINE__在内联函数中的行为

我有一个宏将行号和文件名传递给错误处理程序:

#define SYSTEM_FAILURE (error_code, comment) \
   System_Failure((error_code), (comment), __LINE__, __FILE__);
Run Code Online (Sandbox Code Playgroud)

__LINE__在内联函数中使用时如何解决?

file.h:
inline int divide(int x, int y)
{
    if (y == 0)
    {
        SYSTEM_FAILURE(ENUM_DIVIDE_BY_ZERO, "divide by zero error");
    }
    return x/y;
}
Run Code Online (Sandbox Code Playgroud)

__LINE__包含头文件中的行号,或调用内联函数的源文件的行号(假设编译器在源代码中执行"粘贴")?

c c++ inline line c-preprocessor

15
推荐指数
3
解决办法
4302
查看次数

为什么循环表达式的简单限制为整数范围?

根据F#的规格(见§6.5.7),for循环简单的通过整数界(int又名int32又名System.Int32)的限制startstop,如

for i = start to stop do
    // do sth.
Run Code Online (Sandbox Code Playgroud)

我想知道为什么要求这种类型的for循环的迭代界限int32.为什么不允许uint32int64bigint

我知道序列迭代表达式(for ... in ...)可以迭代任意序列; 然而,这需要分配一个迭代器和调用MoveNext,Current什么不是,因此可能比普通循环效率低得多(增量计数器,比较,条件跳转).为避免这种情况,您将无法使用while和手动递增循环计数器......

奇怪的是,如果表达式包含在序列表达式中,F#确实允许非int32循环边界for,例如

seq { for i = 0I to 10I do
        printfn "%A" i }
Run Code Online (Sandbox Code Playgroud)

所以,我想问题是:是否有一个特殊的原因只允许int32循环?为什么这个限制不适用于表达式中包含的for循环seq

f# for-loop inline imperative-programming control-flow

15
推荐指数
1
解决办法
1594
查看次数

非常频繁地调用std :: nth_element()函数

我没有在任何地方找到这个特定主题......

我在23个整数的std :: vector中的不同数据上调用nth_element()算法,每秒大约400,000次,更精确的"无符号短"值.

我想提高计算速度,这个特定的调用需要很大一部分CPU时间.现在我注意到,与std :: sort()一样,即使具有最高优化级别和NDEBUG模式(Linux Clang编译器),nth_element函数在探查器中也是可见的,因此比较是内联的而不是函数调用本身.好吧,更多的preise:不是nth_element()但是std :: __ introselect()是可见的.

由于数据的大小很小,我尝试使用二次排序函数PIKSORT,当数据大小小于20个元素时,它通常比调用std :: sort更快,可能是因为函数将是内联的.

template <class CONTAINER>
inline void piksort(CONTAINER& arr)  // indeed this is "insertion sort"
{
    typename CONTAINER::value_type a;

    const int n = (int)arr.size();
    for (int j = 1; j<n; ++j) {
        a = arr[j];
        int i = j;
        while (i > 0 && a < arr[i - 1]) {
            arr[i] = arr[i - 1];
            i--;
        }
        arr[i] = a;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这比在这种情况下使用nth_element慢.

此外,使用统计方法是不合适的,比std :: nth_element更快

最后,由于值在0到约20000的范围内,因此直方图方法看起来不合适. …

c++ sorting performance inline nth-element

15
推荐指数
3
解决办法
1106
查看次数